1

特定のデータが3番目のテーブルに存在しない場合にのみ、2つのテーブルからデータを取得するSELECTクエリを実行しようとしています。3つの表は次のとおりです。

ブログ

id   |   blog_name

注目のフィード

id   |   blog_id

サブスクリプション

id   |   member_id   |   blog_id

注目のフィードテーブルにリストされているもののblog_idとblog_nameを返したいのですが、ユーザー(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

このクエリは、別のユーザーが同じフィードにサブスクライブしている場合に、そのユーザーがサブスクライブしている注目のフィードを除外しません。たとえば、Subscriptionsテーブルに次の行がある場合:

1   |   3   |   4
2   |   2   |   4

blog_id 4が注目のフィードにリストされている場合でも、上記の2行目のデータにより、クエリはそのblog_idを返します。グループを使用する必要がありますか?

前もって感謝します!

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 に答える