【问题标题】:SQL JOIN - two teams, one logo databaseSQL JOIN - 两个团队,一个徽标数据库
【发布时间】:2016-07-25 14:02:34
【问题描述】:

我有两个数据库,一个数据库(游戏)包含 hometeamID 和 visitorID。另一个数据库(Teams)包含所有 logoNames 和 teamID。 (Games) hometeamID 和 visitorID 通过 teamID 与 (Teams) 相关联。

我想运行一个 SQl 查询,该查询从(游戏)数据库中输出球队,但也显示每个球队的徽标。我希望输出看起来像这样。

<item>
     <hometeamID>
     <home_logo>
     <visitID>
     <visitor_logo>
</item>

当尝试使用 PHP 查询时,我使用

SELECT *
FROM Games LEFT JOIN
     Teams
     on Games.homeID = Teams.teamID

我可以得到主队的第一个标志,但是当我使用 AND 时

SELECT *
FROM Games LEFT JOIN
     Teams
     on Games.homeID = Teams.teamID and Games.vistorID = Teams.teamID

我什么也得不到。

我可以让查询工作,但我没有得到徽标。

【问题讨论】:

    标签: php mysql sql join


    【解决方案1】:

    您需要两个连接。显然,Teams.teamId 不能同时是 homeIDvisitorId(好吧,除非有一个团队自己玩),这就是您的查询不返回任何行的原因。

    所以,使用两个连接而不是一个:

    SELECT g.homeId, h.logo as home_logo,
           g.vistorId, v.logo as visitor_logo
    FROM Games g LEFT JOIN
         Teams h
         ON g.homeID = h.teamID LEFT JOIN
         Teams v
         ON g.vistorID = v.teamID;
    

    【讨论】:

      【解决方案2】:

      我们来看第二条语句:

      SELECT * FROM Games LEFT JOIN Teams on Games.homeID = Teams.teamID and Games.vistorID = Teams.teamID
      

      您正确地连接了这两个表以获取所需的信息。但是,使用 AND 语句会导致 homeID = teamID AND teamID = visitorID。因此,我们可以将其重写为 homeID = teamID = visitorID。这永远不会发生,因为对于给定条目,homeID 和 visitorID 永远不会相同。

      为了获得两组徽标,我们需要进行两次连接以添加列。所以,类似:

      SELECT Games.homeID, HomeTeam.logo as homeLogo,
             Games.visitorID, VisitorTeam.logo as visitorLogo
      FROM Games LEFT JOIN Teams HomeTeam
          ON Games.homeID = HomeTeam.teamID
      LEFT JOIN Teams VisitorTeam
          ON Games.visitorID = VisitorTeam.teamID;
      

      【讨论】:

      • 感谢您的精彩描述!解决方案效果很好!
      猜你喜欢
      • 2014-03-01
      • 2018-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-02
      • 1970-01-01
      • 2023-04-09
      相关资源
      最近更新 更多