我试过研究这个,但不知道该找什么。我有一个players
表、一个teams表和一个linker表。一个玩家可以在多个团队中。
我需要选择所有不在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 - 多对多关系:选择不在特定团队中的球员,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10507245/