MySQL查询另一个表中不存在一对值的情况

时间:2012-04-23 00:59:11

标签: mysql

我正在尝试预先形成一个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吗?

提前致谢!

2 个答案:

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