2016-07-25 8 views
0

Ich habe zwei Datenbanken, eine Datenbank (Spiele) enthält hometeamID und visitorID. Und die andere Datenbank (Teams) enthält alle logoNames und die TeamID. (Spiele) hometeamID und visitorID beziehen sich auf (Teams) nach teamID.SQL JOIN - zwei Teams, eine Logo-Datenbank

Ich möchte eine SQI-Abfrage ausführen, die die Teams aus der (Games) -Datenbank ausgibt, aber auch die Logos für das jeweilige Team anzeigt. Ich möchte, dass die Ausgabe ungefähr so ​​aussieht.

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

Wenn die Abfrage versucht, PHP, ich benutze

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

Ich kann das erste Logo für Heimmannschaft in Ordnung, aber wenn ich benutze und

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

ich nichts.

Ich bin in der Lage, die Abfrage zu arbeiten, aber ich bekomme nicht die Logos.

Antwort

1

die an der zweiten Aussage Werfen wir einen Blick:

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

Sie sind die beiden Tabellen korrekt verbinden die benötigten Informationen zu erhalten. Mit der AND-Anweisung verursachen Sie jedoch homeID = teamID UND teamID = visitorID. Daher können wir dies umschreiben, um homeID = teamID = visitorID zu sagen. Dies wird niemals passieren, da homeID und visitorID für einen gegebenen Eintrag niemals gleich sein werden.

Um die zwei Gruppen von Logos zu erhalten, müssen wir zwei Joins durchführen, um die Spalten hinzuzufügen. So etwas wie:

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

Vielen Dank für die tolle Beschreibung! Lösung hat super funktioniert! –

2

Sie benötigen zwei Joins. Offensichtlich kann Teams.teamId nicht sowohl homeID als auch visitorId sein (gut, es sei denn, ein Team spielt selbst), weshalb Ihre Abfrage keine Zeilen zurückgibt.

So verwenden zwei statt einer verbindet:

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;