2010-03-03 16 views
5

eine Datenbank mit zwei Tabellen X und Y Da habe ich eine Abfrage, die die beiden Tabellen auf Attribute X.a1 und Y.b1LEFT JOIN sollte. Ich habe die folgende Abfrage:MySQL Ausgabe: LEFT auf leere Tabelle JOIN

SELECT X.a1, X.a2, Y.b1, Y.b2 FROM X LEFT JOIN Y ON (X.a1 = Y.b1) 

Ich dachte, das gut genug sein würde, zu arbeiten, auch wenn Y ist derzeit eine leere Tabelle. Die Abfrage bricht jedoch ab, da die Tabelle Y leer ist. Gibt es eine Möglichkeit, diese Abfrage neu zu formatieren, so dass, selbst wenn Y eine leere Tabelle ist, die LEFT JOIN wird nicht brechen? Oder muss ich immer nur sicherstellen, dass in der Tabelle Y Daten vorhanden sind, auch wenn sie in der Tabelle X nicht übereinstimmen (daher die LEFT JOIN).

+0

Sorry, ich habe die Tabellen bearbeitet, um mehr Sinn zu machen. Ich hatte eine Idee in meinem Kopf und vermasselte es. – ashays

+0

Ich hatte ein ähnliches Problem, und pohs Lösung unten arbeitete für mich. – jkinz

Antwort

5

Ihre Tabellennamen sind ein wenig verwirrend. Sind es X und Y oder X.a und Y.b?

Wenn X und Y:

SELECT X.a1, X.a2, Y.a1, Y.b2 FROM X LEFT OUTER JOIN Y ON (X.a1 = Y.b1) 

sollten alle X, bringen mit NULL-Werte für die Y.a1 und Y.b2, wo es keinen passenden Datensatz ist.

+1

Kennen Sie andere Links Joins? :) LEFT JOIN = LINKS OUTER JOIN – Andrey

+0

@Andrey IMO 'OUTER' sollte in ** äußeren ** Joins unabhängig von den RDBMS-Verknüpfungen verwendet werden. –

+0

ich stimme zu, aber ich denke, es macht keinen Sinn in aktuellen Problem – Andrey

6

Da Sie Ihre tatsächliche SQL nicht veröffentlicht haben, mache ich nur die Annahme hier. Meine Erfahrung sagt mir, dass Sie eine where-Klausel haben könnten, die bewirkt, dass SQL leere Mengen zurückgibt.

SELECT X.a1, X.a2, Y.b1, Y.b2 FROM X LEFT JOIN Y ON (X.a1 = Y.b1) 
WHERE Y.b3 = 'something' 

Die obige SQL wird leere Ergebnismenge zurück. Möglicherweise müssen Sie Ihre SQL in das folgende Format ändern, indem Sie die problematische where-Klausel in der LEFT JOIN ON-Klausel aufrufen.

SELECT X.a1, X.a2, Y.b1, Y.b2 FROM X 
LEFT JOIN Y ON (X.a1 = Y.b1 and Y.b3 = 'something') 
+0

Danke, ich hatte ein ähnliches Problem und das hat es behoben! – jkinz

+0

Nur um klar zu sein - das wird nicht die Ergebnisse auf der Grundlage von Y 'etwas filtern; es wird eine Ergebnismenge zurückgeben, die für alle Y 'etwas' NULL hat. – user2426679

0

Versuchen Sie Ihre Anfrage auf einige SQL-Editor, der Fehler wie HeidiSQL oder ähnliches gibt. In meinem Fall war das Problem eine mehrdeutige ID in der WHERE-Klausel.