【问题标题】:MYSQL Join tables create new columnsMYSQL 连接表创建新列
【发布时间】:2021-06-20 08:50:50
【问题描述】:

我正在尝试加入表格;第一个是夹具,其中包含使用缩写名称的球队,第二个表格包含所有球队的详细信息,例如全名和主场。

我想加入这些表格并显示 2 x 球队的全名和主队的场地。

我下面的代码显示了我需要的一切,除了我需要显示我需要显示的客队全名。

SELECT f.mid
     , f.gid
     , f.hteam
     , f.ateam
     , p.venue
     , p.fname as hteam
     , p.fname as ateam
  FROM fixtures f
  JOIN teams p 
    ON p.abbrev = f.hteam
WHERE mid = 1       

表 1(夹具)

mid gid  hteam ateam
1    1   WCE   LIV
1    2   MUN   ESS
        

表 2(团队)

fname       abbrev  venue
WEST COAST   WCE    OPTUS
LIVERPOOL    LIV    ANFIELD
MANCHESTER   MUN    OLD TRAFFORD
ESSENDON     ESS    WINDY HILL

【问题讨论】:

    标签: mysql join


    【解决方案1】:

    您必须将fixtures 加入到teams 的2 个副本中:

    SELECT f.mid, f.gid, f.hteam, f.ateam, 
           t1.venue, t1.fname hteam, t2.fname ateam
    FROM fixtures f
    JOIN teams t1 ON t1.abbrev = f.hteam
    JOIN teams t2 ON t2.abbrev = f.ateam
    WHERE f.mid = 1
    

    【讨论】:

      【解决方案2】:

      您应该添加一个加入 teams,因为您需要两个团队的信息:

      SELECT 
         f.mid, 
         f.gid, 
         f.hteam, 
         f.ateam, 
         p.venue, 
         p.fname as hteam,
         a.fname as ateam
      FROM fixtures f
      JOIN teams p ON p.abbrev = f.hteam
      JOIN teams a On a.abbrev = f.ateam
      WHERE mid = 1 
      

      【讨论】:

        【解决方案3】:

        您可以通过在SELECT 语句中使用子查询来获取客队的全名

        SELECT f.mid, f.gid, f.hteam, f.ateam, p.venue, p.fname as hteam,
               (SELECT fname FROM teams WHERE abbrev = f.ateam) as ateam
        FROM fixtures f
        JOIN teams p ON p.abbrev = f.hteam
        WHERE mid = 1 
        

        Working Fiddle

        【讨论】:

        • 好吧,这不是我会做的:-(
        • 一个理由或解释将有助于我们所有人从您的经验中学习。
        • 我倾向于避免子查询,除非在必要的情况下(或者它们明显提高了性能)
        • 谢谢你,我同意,但是当表大小增加时,拆分查询在现实生活中对我有帮助。
        猜你喜欢
        • 2017-02-11
        • 2018-06-04
        • 2012-09-03
        • 2010-11-21
        • 2019-02-01
        • 2012-06-17
        • 2012-01-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多