2012-04-23 13 views
1

3つ目のテーブルに特定のデータが存在しない場合にのみ、2つのテーブルのデータを取得するSELECTクエリを実行しようとしています。他のテーブルに値のペアが存在しないMySQLクエリ

ブログ

フィード

id | blog_id 

サブスクリプション

id | member_id | blog_id 

特集

id | blog_name 

私がおすすめフィードにリストされているのblog_idとBLOG_NAMEを返すようにしたい:ここでは3つのテーブルがありますユーザー(member_id)がサブスクリプションで既に購読しているおすすめフィードを除外しますテーブル。ここで私は、これまで(MEMBER_IDのための3を使用して - テーブル名が上記よりも少し異なっていますのでご注意ください)しているクエリは次のとおりです。

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 

このクエリは、注目を排除するものではないユーザーがいる場合に加入していることをフィード別のユーザーが同じフィードに登録されています。サブスクリプションテーブルには、次の行を持っている場合たとえば、:blog_id 4が特色のフィードに表示されている場合は

1 | 3 | 4 
2 | 2 | 4 

は、私のクエリはまだによる上記のデータの第2行にそのblog_idを返します。私はGROUPを使う必要がありますか?

ありがとうございます!

+0

BLOGsには存在しないサブスクリプションからのブログのリストが必要ですか? – Starx

+0

Feature_ Feedsテーブル(Blogsテーブルでブログ名を取得するためのJOIN)にブログのリストを追加したいのですが、それらのブログはSubscriptionテーブルに特定のmember_id(ブログはmember_id 3とblog_id 4がサブスクリプションの行)。申し訳ありません - うまくいけば、それほど混乱しにくいです。 –

答えて

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 
関連する問題