我正在尝试预先形成一个SELECT查询,该查询仅在第三个表中不存在某些数据时才从两个表中获取数据。以下是三个表格:
博客
id | blog_name
精选Feed
id | blog_id
订阅
id | member_id | blog_id
我想返回精选Feed表中列出的blog_id和blog_name,但在Subscriptions表中排除用户(member_id)已订阅的精选Feed。这是我到目前为止的查询(使用3表示member_id - 请注意表名与上面略有不同):
SELECT featured_feeds.blog_id, featured_feeds.category_id, blogs.blog_name FROM featured_feeds LEFT JOIN blogs ON featured_feeds.blog_id = blogs.blog_id LEFT JOIN subscriptions ON subscriptions.blog_id = featured_feeds.blog_id WHERE subscriptions.blog_id != '3' ORDER BY blogs.blog_name ASC
如果其他用户订阅了相同的Feed,则此查询不会排除用户订阅的精选Feed。例如,如果Subscriptions表具有以下行:
1 | 3 | 4
2 | 2 | 4
如果在精选Feed中列出了blog_id 4,由于上面的第二行数据,我的查询仍将返回该blog_id。我需要使用GROUP吗?
提前致谢!
答案 0 :(得分:2)
SELECT b.id, b.blog_name
FROM blogs b
INNER JOIN featured f on f.blog_id = b.id
WHERE b.id NOT IN (SELECT id FROM subscriptions WHERE member_id = 3)
答案 1 :(得分:2)
在左边连接外部,省略匹配的结果。
SELECT * FROM `featured` f
LEFT OUTER JOIN `subscription` s
ON f.blog_id = s.blog_id
WHERE s.id IS null