【问题标题】:Inner Join tables replacing ID values替换 ID 值的内部联接表
【发布时间】:2017-02-21 21:28:19
【问题描述】:

我有一个团队表,每个团队都有这样的 ID 号...

TEAM ID      TEAM
1            Maitland
2            Orlando
3            Winter Park
4            Lake Mary

以此类推

我有一个表格,列出了只使用 ID 号的时间表......

TEAM ID      Game1     Game2    Game3
1            2         3        4

是否可以将这些表的顶部进行 INNER JOIN 以创建一个表,将 ID 号替换为正确的团队名称,如下所示...

TEAM        Game1      Game2         Game3
Maitland    Orlando    Winter Park   Lake Mary

【问题讨论】:

  • 是的,您必须在每场比赛中加入您的球队桌一次。所以 3 从日程表中加入团队表。或者您可以重组数据,以便匹配列出 2 个球队和一个单独的字段列出比赛,然后您将不得不旋转比赛数据。您的 MATCHES 表是否总是只有 3 场比赛?
  • 不,每队将有 10 场比赛。
  • 鉴于这种设计,您最好创建一个对每个名称进行查找的过程。这样你就可以坚持简单的加入,只需调用每个团队和游戏的过程。
  • 如果有第四场比赛怎么办?您的架构已损坏

标签: mysql database inner-join


【解决方案1】:
select t1.name as TEAM_ID, t2.name as Game1, t3.name as Game2, t4.name as Game3
from schedule s
     inner join teams t1 on t1.team_id = s.team_id
     inner join teams t2 on t2.team_id = s.Game1
     inner join teams t3 on t3.team_id = s.Game2
     inner join teams t4 on t4.team_id = s.Game3
     ...
     ...
     inner join teams t10 on t10.team_id = s.Game9;

【讨论】:

    【解决方案2】:

    您拥有一对一的团队游戏关系。

    如果您只是以正常形式存储它 - teamid、game - 以某种方式排序,例如按日期:

    CREATE TABLE schedules (
        teamid INT,
        playing_with INT,
        order DATE
    
        FOREIGN KEY (teamid)
           REFERENCES teams(teamid)        
    );
    

    那么您将在两个连接中拥有所有内容:

    SELECT t.teamname AS team, t1.teamname AS PlayWithTeam
    FROM schedules s
        INNER JOIN teams t ON s.teamid=t.teamid
        INNER JOIN teams t1 ON s.playing_with=t1.teamid
    ORDER BY s.teamid, s.order;
    

    Here's the Fiddle, check it.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-01
      • 2017-03-24
      • 1970-01-01
      • 2012-07-19
      • 2018-02-04
      • 2017-09-26
      相关资源
      最近更新 更多