mysql - 多对多关系 : select players that are not on a specific team

标签 mysql sql group-by left-join

我尝试对此进行研究,但不确定要搜索什么。我有一个 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/

相关文章:

mysql - 给定一个字符串,找到该字符串以该值开头的行

sql - SQL数据库可以支持 "insert only"模式吗?

mysql - 使用 mySQL 按顺序检索值并减去行

mysql - 从表中选择数据时出现问题?

mysql - 以特定格式显示数据时遇到问题

php - 创建一个 HTML/PHP 链接

php - 在数据库 MySQL 中使用 LIKE 运算符搜索 HTML

sql - 销售预测的 postgres 查询

MySQL 服务器仅使用 48 个 CPU 内核中的 1 个进行 GROUP BY 查询

r - 使用 dplyr 通过分组变量解析多个条件