选择用户不喜欢的项目

时间:2015-02-16 18:56:10

标签: php sql postgresql

在我的网站上,我有一个用户表,主键是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

我想要的是相同的查询,但我希望它返回他之类的所有相册。所以基本上,选择不在该查询中的所有专辑。

我需要做些什么来改变呢?

1 个答案:

答案 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