2012-04-23 36 views
1

我試圖執行一個SELECT查詢,該查詢從兩個表中獲取數據僅當某些數據不存在於第三個表中時。這裏有三個表:MySQL查詢其中一對值不存在於另一個表中

博客

id | blog_name 

精選訂閱

id | blog_id 

訂閱

id | member_id | blog_id 

我想回到那些在精選提要中的blog_id和BLOG_NAME表,但排除用戶(member_id)已訂閱到訂閱中的精選饋送表。這是我迄今的查詢(使用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 

此查詢不排除精選訂閱該用戶預訂的,如果另一個用戶訂閱了相同的提要。例如,如果訂閱表有以下行:

1 | 3 | 4 
2 | 2 | 4 

如果blog_id 4在功能飼料上市,我的查詢將仍然是blog_id返回由於上述數據的第二行。我需要使用GROUP嗎?

在此先感謝!

+0

所以,你想訂閱博客列表,這是不存在BLogs,對吧? – Starx 2012-04-23 01:03:12

+0

我想要一個特色供稿表中的博客列表(JOIN獲取帶有博客表的博客名稱),其中這些博客沒有在具有某個member_id的訂閱表中列出(即,博客4,如果member_id 3和blog_id 4不是訂閱中的行)。對不起 - 希望這不是令人困惑的哈。 – 2012-04-23 01:09:31

回答

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) 
2

做一個外部左連接,省略匹配結果。

SELECT * FROM `featured` f 
LEFT OUTER JOIN `subscription` s 
ON f.blog_id = s.blog_id 
WHERE s.id IS null 
相關問題