问题描述
我有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