在我的网站上,我有一个用户表,主键是username
。我有一张专辑表,有专辑ID和专辑标题。我还有一个表user_albums,用于模拟许多用户的关系,如许多专辑。
这是一个选择查询,返回特定用户喜欢的相册:
SELECT e.album_title
FROM user_albums d
INNER JOIN albums e ON d.album_id = e.album_id
WHERE d.user_id = $user
我想要的是相同的查询,但我希望它返回他不之类的所有相册。所以基本上,选择不在该查询中的所有专辑。
我需要做些什么来改变呢?
答案 0 :(得分:2)
这转换为NOT EXISTS,"此用户的ID未列在user_albums"中:
SELECT e.album_title FROM albums e
WHERE NOT EXISTS
( SELECT * FROM user_albums d
WHERE d.user_id = '$user'
AND d.album_id = e.album_id
)
如果您不想使用子查询,常见的方法是使用OUTER JOIN / IS NULL:
SELECT e.album_title
FROM user_albums d
LEFT JOIN albums e
ON d.album_id = e.album_id
AND d.user_id = '$user' -- when there's no match a NULL will be returned
WHERE d.album_id IS NULL; -- find that NULL