SQL JOIN - 两个团队,一个徽标数据库

时间:2016-07-25 14:02:34

标签: php mysql sql join

我有两个数据库,一个数据库(游戏)包含hometeamID和visitorID。而其他数据库(团队)包含所有logoNames和teamID。 (游戏)hometeamID和visitorID由teamID与(团队)相关。

我想运行一个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

我一无所获。

我可以让查询生效,但我没有获得徽标。

2 个答案:

答案 0 :(得分:2)

你需要两个连接。显然,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;

答案 1 :(得分:1)

让我们看看第二个陈述:

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

您正确加入这两个表格以获取所需信息。但是,使用AND语句会导致homeID = teamID和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;