【问题标题】:MySQL Combing Select from multiple tablesMySQL Combing 从多个表中选择
【发布时间】:2017-01-26 00:23:41
【问题描述】:

我正在尝试跟踪运动统计数据,我有两个表设置如下(球队将根据周而变化):

表一:

+---------+---------+---------+---------+  
|  Team   |   PYardG    |   RYardG    |   TDG    |  
+---------+---------+---------+---------+  
| Steelers  | 250       | 120         | 3  |  
| Broncos  | 200        | 130         | 2  |  
+---------+---------+---------+---------+  

表2:

+---------+---------+---------+---------+  
|  Week  |  Team1  |  Team2  |  Team3  |  
+---------+---------+---------+---------+  
| Week1  | Steelers  | Broncos  | Colts  |  
| Week2  | Patriots  | Giants  | Cowboys  |  
+---------+---------+---------+---------+ 

理想情况下,我的输出应该是这样的:

+---------+---------+---------+---------+  
|  Week1  |  PYardG  |  RYardG  |  TDG  |  
+---------+---------+---------+---------+  
| Steelers  | 250    | 120      | 3  |  
| Broncos  | 200     | 130      | 2  |  
+---------+---------+---------+---------+ 

目标是根据表 2 中的周和团队名称按团队显示表 1 中的统计数据。

在做一些研究时,我无法确定子查询、JOIN 还是 UNION 是我最好的选择。有没有办法根据表 2 中的团队名称和周从表 1 中查找统计数据?感谢您的帮助!

编辑:对于格式不佳的表格,我深表歉意,这仍然是全新的。 编辑 2:也添加了所需的输出。表 1 会根据周而改变,我有一个脚本来按周存储我正在寻找的统计数据。

【问题讨论】:

  • 不清楚您想要的输出是什么。可以包含实际数据吗?
  • 您的预期输出与Table1 的不同之处仅在于第一列的名称。您确定您的数据正确吗?
  • 是的,我认为使用一张存储统计数据的表格和一个按周存储球队的单独表格比我必须存储所有这些数据的一张大表格更容易。
  • 你还没有解释你想要做什么。输出表中没有表 2 中的任何内容。
  • 您的意思是对于具有Week1 列的输出表,它应该只包含表2 的Week1 行中命名的团队的行吗?

标签: mysql join subquery union


【解决方案1】:

我认为您需要更改表 2 的结构。 它可以像

+---------+---------+
|  Week  |  Team |  
+---------+---------+ 
| Week1  | Steelers  | 
| Week1  | Broncos  |
| Week1  | Colts   |
| Week2  | Patriots  | 
+---------+---------+

因为如果超过三个团队,那么你需要每次都改变结构,这对数据完整性不利。

然后您可以使用简单的选择查询来获取数据。

选择 t1.Team, t1.PYardG,t1.RYardG,t1.TDG, t2.week from table1 t1, table2 t2 where week = 'week1' and t1.team = t2.team;

【讨论】:

    【解决方案2】:

    使用UNIONTable2 中的所有团队放入子查询的单个列中。然后加入Table1

    SELECT t1.team AS Week1, PYardG, RYardG, TDG
    FROM Table1 AS t1
    JOIN (SELECT Team1 AS team FROM Table2
          WHERE week = 'Week1'
          UNION
          SELECT Team2 FROM Table2
          WHERE week = 'Week1'
          UNION
          SELECT Team3 FROM Table2
          WHERE week = 'Week1') AS t2
    ON t1.team = t2.team
    

    如果您对数据进行规范化,以便团队位于 Table2 中的单独行中,而不是同一行的多个列中,这会更容易。然后,您可以简单地加入表,而不必将列转为子查询的行。

    【讨论】:

    • 谢谢!我会试一试。
    猜你喜欢
    • 2010-10-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-08
    • 2011-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多