我尝试对此进行研究,但不确定要搜索什么。我有一个 players
表、一个 teams 表和一个链接器表。一个玩家可以在多个团队中。
我需要选择所有不在 XYZ 队的球员。
我试过:
SELECT * FROM players LEFT JOIN linker ON players.playerID = linker.playerID
WHERE NOT linker.teamID = 'XYZ'
但随后多次返回玩家,我得到误报(假设玩家在 XYZ、ABC 和 LMNOP 团队中 - 玩家返回两次)。
我试过使用 GROUP BY players.playerID
来处理重复项。但随后我得到误报,XYZ 上的玩家出现在列表中。
我确定我遗漏了什么。
(附:我需要这个的原因是建立一个可以添加到团队的球员列表,即尚未加入球队的球员。)
最佳答案
使用NOT IN
:
SELECT *
FROM players
WHERE playerID NOT IN
( SELECT playerID
FROM linker
WHERE teamID = 'XYZ'
)
使用 LEFT JOIN - IS NULL
,您的尝试更正了:
SELECT players.*
FROM players
LEFT JOIN linker
ON linker.playerID = players.playerID
AND linker.teamID = 'XYZ'
WHERE linker.playerID IS NULL
使用NOT EXISTS
:
SELECT *
FROM players
WHERE NOT EXISTS
( SELECT *
FROM linker
WHERE linker.playerID = players.playerID
AND linker.teamID = 'XYZ'
)
关于mysql - 多对多关系 : select players that are not on a specific team,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10507245/