gpt4 book ai didi

mysql - 如何通过连接表中的引用对查找记录?

转载 作者:行者123 更新时间:2023-11-29 01:38:07 26 4
gpt4 key购买 nike

有两个模型 Player 和 Team 相互关联为多对多,因此模式包含三个表 playersplayer_teamsteams。鉴于每支球队可能由 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com