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

标签 mysql sql ruby-on-rails postgresql activerecord

有两个模型 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/

相关文章:

php - "UPDATE WHERE NOT LIKE? "

mysql - RoR,需要在表关联中创建递归关系

php - 将第三个表添加到联接

php - MySQL 将 SUM 与多个连接一起使用

sql - postgresql连接2个表

sql - 如何将 SELECT 查询的结果表存储在变量中?

ruby-on-rails - 执行超过 60 秒时如何引发异常?

ruby-on-rails - 在Rails的文本框中格式化DateTime

mysql - 在没有 GROUP BY 的聚合查询中,SELECT 列表的表达式 #2 包含非聚合列

php - 如何在 phpMyAdmin 中编写存储过程?