1

我正在尝试执行一个 SELECT 查询,该查询仅在第三个表中不存在某些数据时才从两个表中获取数据。以下是三张表:

博客

id   |   blog_name

精选提要

id   |   blog_id

订阅

id   |   member_id   |   blog_id

我想返回 Featured Feeds 表中列出的那些的 blog_id 和 blog_name,但排除用户 (member_id) 在 Subscriptions 表中已经订阅的 Featured Feeds。这是我到目前为止的查询(使用 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

如果另一个用户订阅了相同的订阅源,则此查询不会排除用户订阅的精选订阅源。例如,如果 Subscriptions 表有以下行:

1   |   3   |   4
2   |   2   |   4

如果 blog_id 4 列在特色提要中,由于上面的第二行数据,我的查询仍将返回该 blog_id。我需要使用 GROUP 吗?

提前致谢!

4

2 回答 2

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)
于 2012-04-23T01:11:46.183 回答
2

做一个外部左连接,省略匹配的结果。

SELECT * FROM `featured` f
LEFT OUTER JOIN `subscription` s
ON f.blog_id = s.blog_id
WHERE s.id IS null
于 2012-04-23T01:12:25.047 回答