以下で苦労しました。
3 つのテーブルがあります: プレーヤー、players_clothes、teams_clothes です。
表players
:
id ユーザー team_id 1タム4 2 ロボ 5 3 ボブ 4
つまり、トムとボブは同じチームに所属しています
表players_clothes
:
id clothes_id p_id 1 13 1 2 35 3 3 45 3
ボブには衣料品 35 と 45 があり、ロボには何もありません。
表teams_clothes
:
id clothes_id team_id 1 35 4 2 45 4 3 55 4 4 65 5
これは、どのチームがどの衣料品の権利を持っているかを示しています。問題: トムは自分のチームのものではない衣服を着ています...これは違法であると仮定しましょう。
特定のチームのために違法な服装をしているすべての人を捕まえる方法を理解するのに苦労しています.
SELECT pc.clothes_id FROM players AS p
JOIN players_clothes AS pc
ON p.id = pc.p_id
AND p.team_id = 4 GROUP BY pc.clothes_id
(信じられないかもしれませんが、2 人のプレイヤーに同じ服を割り当てることができるので、players_clothes.clothes_id でグループ化します)
これにより、次のセット(13、35、45)が得られると思います
チーム4が実際に持っている衣装と照らし合わせてみたいと思います。
SELECT clothes_id FROM teams_clothes WHERE team_id = 4 and this return (35, 45, 55)
(13) を返すようにクエリを作成するにはどうすればよいですか? NOT EXISTS IN などを試してみましたが、 GROUP BYplayers_clothes.clothes_id 部分が邪魔になると思います