【问题标题】:Joining player and game tables to get player points加入玩家和游戏桌以获得玩家积分
【发布时间】:2019-08-11 17:01:04
【问题描述】:

我有以下 SQL 表,我基本上是在尝试提取 Ralph 2018 年参加的每场比赛的表格,以及得分的数量。

Ralph 有一个 unique_id,但可以在多个团队或不同位置上打球。他打球的每一年都有一个新记录输入到每个球队和/或位置的球员信息表中。

游戏数据表的玩家 ID 可能同时使用了 Ralph 的两条玩家信息记录,例如,游戏数据的记录 1 和 2 都是 Ralph 的,他的实际总得分为 18 (12 + 6)。我不需要将这些点加在一起,因为这可以在 PHP 中更轻松地完成,但我确实需要提取两条记录。

------------------------------
          Player Info as pi
------------------------------
id | unique_id | year | name | team | pos
1     5000       2018   Ralph   5       F
2     5000       2018   Ralph   5       C
3     5600       2018   Bill    5       G
4     5000       2017   Ralph   4       F
5     2688       2016   Mike    6       G


------------------------------
          Game Info as gi
------------------------------
id  | team 1 | team 2
1        5       6
2        6       5
3        8       3
4        6       2


------------------------------
          Game Data as gd
------------------------------
id  | game_info_id | player_id | Points
1         1               1        12   
2         1               2        6    
3         2               1        4    
4         4               5        6

表格应显示 pi.id、pi.unique_id、gi.id、gd。* 其中 gd.player_id = Ralph 的任何 pi.id 的 AND pi.year=2018

感谢您的帮助,这似乎有点超出我的控制范围。

【问题讨论】:

  • 请标记适当的数据库名称、您目前编写的查询和预期输出。

标签: sql join multiple-tables


【解决方案1】:

像这样加入表格:

select
  pi.id, pi.unique_id, gi.id, gd.*
from playerinfo pi
inner join gameinfo gi on pi.team in (gi.team1, gi.team2)
inner join gamedata gd on gd.game_info_id = gi.id and gd.player_id = pi.id
where pi.name = 'Ralph' and pi.year = 2018

【讨论】:

  • 这看起来是一个有效的解决方案。感谢您的快速响应,以及您花时间解决问题。对此,我真的非常感激。 :)
猜你喜欢
  • 1970-01-01
  • 2018-06-14
  • 1970-01-01
  • 2017-09-14
  • 1970-01-01
  • 1970-01-01
  • 2020-01-10
  • 2022-11-25
  • 1970-01-01
相关资源
最近更新 更多