有两个模型 Player 和 Team,它们以多对多的方式相互关联,因此架构包含三个表 players
、player_teams
和 teams
。
鉴于每个团队可能由 1 或 2 名两名玩家组成,如何通过已知玩家 ID 查找团队?
在此 SQLFiddle http://sqlfiddle.com/#!15/27ac5
- 查询玩家 ID 1 和 2 应返回 ID 为 1 的球队
- 查询玩家 ID 2 应该返回 ID 为 1 和 2 的球队
- 查询玩家 ID 3 时应返回 ID 为 3 的球队
最佳答案
我认为您的问题陈述的第三个要点有一个错误。没有团队 3。在第三种情况下,我认为您想要返回团队 2。(玩家 3 所在的唯一团队。)
此查询需要 2 位信息 - 您感兴趣的玩家以及玩家数量。
SELECT team_id, count(*)
FROM players_teams
WHERE player_id IN (1,2)
GROUP BY team_id
HAVING count(*) = 2
-- returns team 1
SELECT team_id, count(*)
FROM players_teams
WHERE player_id IN (2)
GROUP BY team_id
HAVING count(*) = 1
-- returns teams 1 & 2
SELECT team_id, count(*)
FROM players_teams
WHERE player_id IN (3)
GROUP BY team_id
HAVING count(*) = 1
-- returns team 2
编辑:这是一个通过 ruby 使用它的示例,这可能会更清楚它的工作原理......
player_ids = [1,2]
sql = <<-EOF
SELECT team_id, count(*)
FROM players_teams
WHERE player_id IN (#{player_ids.join(',')})
GROUP BY team_id
HAVING count(*) = #{player_ids.size}
EOF
关于mysql - 如何通过连接表中的引用对查找记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33907723/