SQL查询检查ID是否为另一个表的一部分

问题描述

我有2张桌子:

tblBook: BookID,标题

tbl收藏: FavoriteID,UserID,BookID

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

对于Foreach BookID,应检查tblFavorite中是否有包含该BookID和给定UserID的行。 ->是非题

解决方法

您可以使用相关子查询:

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
,

使用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