我有两个数据库,其中一个数据库(Games)包含hometeamID和visitorID。另一个数据库(Teams)包含所有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
我一无所获。
我可以让查询工作,但我没有得到徽标。
您需要两个联接。显然,Teams.teamId
不能同时是homeID
和visitorId
(好吧,除非一个团队在自己比赛),这就是为什么您的查询不返回行的原因。
因此,使用两个联接而不是一个:
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;
让我们看看第二条语句:
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;