アップデート
sqfiddle にはデータベース モデルがあります: http://sqlfiddle.com/#!2/8dbb0/10
そして、注釈に従って質問を更新しました。
元の投稿 3 つのテーブルがあります。
投稿
タグ
tag_to_post
ユーザー 2 によって使用された tag_id 1 を仮定します。ここで、別のユーザーが tag_id 1 でタグ付けしたものの、ユーザー 2 はまだ tag_id 1 でタグ付けしていないすべての投稿をユーザー 2 に表示したいと考えています。
クエリ:
SELECT posts.id AS post_id, tags.id AS tag_id, tag_to_post.user_id AS
user_tagged_post
FROM posts
LEFT JOIN tag_to_post ON tag_to_post.post_id = posts.id
LEFT JOIN tags ON tags.id = tag_to_post.tag_id
WHERE tags.id =1
次のようなものを生成します。
post_id | tags_id | user_tagged_post
1 | 1 | 1
1 | 1 | 2
2 | 1 | 2
3 | 1 | 1
したがって、投稿ID 3のみが残るはずです。
最初に、次のような where ステートメントで試しました。
WHERE tags.id = 1 AND tag_to_post.user_id != '2'
しかし、これはもちろん、重複しているため、post_id 1 を除外するものではありません。WHERE 句の前に DISTINCT または GROUPED BY があるべきだと思いますが、これは許可されていないようです。唯一の方法はサブクエリですか?これまで解決策が見つかりませんでした。何か案は?