我一直在以下方面苦苦挣扎。
我有 3 张桌子:players、players_clothes 和 teams_clothes。
表players
:
id 用户 team_id 1 汤姆 4 2 机器人 5 3 鲍勃 4
所以汤姆和鲍勃都在同一个团队
表players_clothes
:
id 衣服_id p_id 1 13 1 2 35 3 3 45 3
Bob 有服装物品 35 和 45,robo 没有。
表teams_clothes
:
id 衣服 ID 团队 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
(我按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 BY player_clothes.clothes_id 部分妨碍了