タグテーブルがあります-id、name、owner_id(owner_idはユーザーのFKです)
および user_tags テーブル - user_id、tag_id (これらのタグを共有するためのタグとユーザー間のリンクテーブル - つまり、タグにアクセスできるが所有者ではないユーザー)
user_tags テーブルの結合を介してタグを取得できるクエリがあります。
SELECT tags . *
FROM tags
JOIN user_tags ON user_tags.user_id =2
AND user_tags.tag_id = tags.id
LIMIT 0 , 30
しかし、同じクエリで、タグ WHERE tags.owner_id = 2 を選択して、リンク テーブル (user_tags) を介してそのユーザーと共有されているすべてのタグと、ユーザーが所有するタグ (tags.owner_id = user_id) を取得したいと思います。
結合後に WHERE tags.owner_id = 2 を含めると、tags.owner_id = 2 の結果のみが返されます。
OR tags.owner_id = 2 を含めると、すべての結果が繰り返されます。
ステートメントSELECT DISTINCT... OR tags.owner_id = 2
を作成すると、正しい結果セットになりますが、それが条件付きの結合を行う正しい方法かどうかはわかりません。
より良い方法/ベストプラクティスはありますか?
また、結合が複数の結果を返すのはなぜですか (つまり、なぜ、SELECT DISTINCT
またはGROUP BY
必要なのですか?
ありがとうございました。
構造を明確にするための編集