Hi,
ich hab ein kleines Problem mit einer MySQL Query. Ich möchte gerne 3 Tabellen miteinander verbinden. Das funktioniert auch sehr gut, sowohl mit JOIN als auch mit WHERE ... AND. Nun ergibt sich aber das Problem, das es vorkommen kann das ein Feld (t1.SID) NULL ist. Da dieses Feld für den JOIN in der Syntax als Vorraussetzung gilt, überspringt die Query alle Reihen in der das Feld NULL ist, da nunmal keine Zuordnung (t1.SID = t3.ID) besteht. Die Syntax im Überblick:
Wie kann ich nun erreichen das er im Falle dass das Feld t1.SID NULL ist keinen Join durchführt? Ich habe mir schon die Control Flow Functions in der MySQL Doku angeschaut, aber habe bisher keine Möglichkeit gefunden das Problem mit einer Query zu lösen.
EDIT: Hier ein kleines Bild zur Verdeutlichung:
BTW: Es gibt noch die Möglichkeit je nach Fall einen Join durchzuführen mit z.B.
Diese Lösung hat aber das Problem, das man in Tabelle 3 eine Dummyreihe benötigt mit welcher dann ggf. gejoint wird. Dummerweise funktionieren Konstrukte wie diese hier nicht:
Entweder ich mache hier einen Fehler bzw. MySQL unterstützt dies einfach nicht .
ich hab ein kleines Problem mit einer MySQL Query. Ich möchte gerne 3 Tabellen miteinander verbinden. Das funktioniert auch sehr gut, sowohl mit JOIN als auch mit WHERE ... AND. Nun ergibt sich aber das Problem, das es vorkommen kann das ein Feld (t1.SID) NULL ist. Da dieses Feld für den JOIN in der Syntax als Vorraussetzung gilt, überspringt die Query alle Reihen in der das Feld NULL ist, da nunmal keine Zuordnung (t1.SID = t3.ID) besteht. Die Syntax im Überblick:
PHP-Code:
SELECT t1.Name, t1.Code, t2.Name, t3.Name
FROM tblCi AS t1, tblCo AS t2, tblSt AS t3
WHERE (t1.CID = t2.ID) AND (t1.SID = t3.ID)
AND (t1.Name LIKE 'a%')
ORDER BY t1.Name LIMIT 10
EDIT: Hier ein kleines Bild zur Verdeutlichung:
BTW: Es gibt noch die Möglichkeit je nach Fall einen Join durchzuführen mit z.B.
PHP-Code:
SELECT t1.Name, t1.Code, t2.Name, t3.Name
FROM tblCi AS t1, tblCo AS t2, tblSt AS t3
WHERE (t1.CID = t2.ID) AND
CASE
WHEN t1.StateID IS NULL THEN (t3.Name = 'Dummy')
ELSE
(t1.SID = t3.ID)
END
AND (t1.Name LIKE 'a%') ORDER BY t1.Name LIMIT 10
PHP-Code:
SELECT t1.Name, t1.Code, t2.Name, t3.Name
FROM tblCi AS t1, tblCo AS t2, tblSt AS t3
WHERE (t1.CID = t2.ID)
CASE
WHEN t1.StateID IS NOT NULL THEN AND (t1.SID = t3.ID)
END
AND (t1.Name LIKE 'a%') ORDER BY t1.Name LIMIT 10
Kommentar