【问题标题】:SQL Query check if ID is part of another tableSQL查询检查ID是否是另一个表的一部分
【发布时间】:2021-02-16 00:18:32
【问题描述】:

我有 2 张桌子:

tbl书: 书名、书名

tbl最喜欢的: FavoriteID、UserID、BookID

我想开发一个 SQL 查询来选择 BookID、Title、IsFavorite (true|false),同时将 UserID 作为参数。

对于每个 BookID,应该检查是否存在具有此 BookID 的行和 tblFavorite 中的给定 UserID。 -> 真/假

【问题讨论】:

  • 如何将 FavoriteID 转换为 True/False?
  • 这就是问题所在。当 tblFavorite 中存在具有此 BookID 和给定 UserID 的行时,IsFavorite 的值应为 true,否则为 false。
  • 用您正在使用的数据库标记您的问题。

标签: sql select subquery left-join innodb


【解决方案1】:

使用 LEFT JOIN 和 CASE 表达式,这样如果 tblFavorite (NULL) 中没有记录,则显示 False,否则为 True。

SELECT B.BookID, B.Title, CASE WHEN FavoriteID IS NULL THEN 'False' ELSE 'True' END AS IsFavorite
FROM tblBook B
LEFT JOIN tblFavorite F on B.BookID = F.BookID

【讨论】:

    【解决方案2】:

    您可以使用相关子查询:

    select b.*, 
        case when exists (select 1 from tblfavorite f where f.bookid = b.bookid and f.userid = ?)
            then 1
            else 0
        end as isfavorite
    from tblbook b
    

    问号代表您为其生成报告的用户的 ID。在支持布尔或整数评估条件的数据库中(例如 MySQL 或 Postgres),您可以省去 case 表达式:

    select b.*, 
        exists (select 1 from tblfavorite f where f.bookid = b.bookid and f.userid = ?) as isfavorite
    from tblbook b
    

    【讨论】:

      猜你喜欢
      • 2012-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-11
      • 2020-11-16
      • 1970-01-01
      • 2018-10-23
      相关资源
      最近更新 更多