2016-07-25 8 views
0

2つのデータベースがあり、1つのデータベース(ゲーム)にhometeamIDとvisitorIDが含まれています。他のデータベース(チーム)には、すべてのロゴの名前とチームIDが含まれています。 (Games)hometeamIDとvisitorIDはteamIDによって(Teams)に関連しています。SQL JOIN - 2つのチーム、1つのロゴデータベース

(ゲーム)データベースからチームを出力するSQlクエリを実行したいと思いますが、それぞれのチームのロゴも表示します。私は出力がこのように見えるようにしたい。 PHPを使用してクエリを実行しようとすると、私は

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

を使用し、私はhometeamの罰金のための最初のロゴを得ることができますが、私が使用している場合、AND

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

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

私は何を取得。

私は動作するようにクエリを取得することはできますが、私はロゴを取得しません。

答えて

1

のが第二の文を見てみましょう:

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

をあなたは正しく、必要な情報を取得するために2つのテーブルを結合しています。ただし、ANDステートメントを使用すると、homeID = teamIDとteamID = visitorIDが発生します。したがって、homeID = teamID = visitorIDというようにこれを書き直すことができます。 homeIDとvisitorIDは決して同じエントリーではないので、これは決して起こりません。

2組のロゴを取得するには、列を追加するために2つの結合を行う必要があります。だから、

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; 
+1

ありがとうございました!解決策は素晴らしい! –

2

2つの結合が必要です。明らかに、Teams.teamIdhomeIDvisitorIdの両方になることはできません(チームがプレーしている場合を除き)。

ので、2の代わりに1の結合を使用:

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; 
関連する問題