mysql 5: Gibt es einen "optionalen" Join?
Chris
- datenbank
1 Cheatah0 Chris0 Ilja0 Frank (no reg)
0 Struppi
Moin,
gibt es so etwas wie einen optionalen Join? Nehmen wir mal diese Abfrage:
SELECT A.id, A.mail, B.nickname
FROM users AS A
JOIN userdata AS B
WHERE A.id = '1'
AND B.id = A.id
Hier werden die Tabellen "users" und "userdata" miteinander verknüpft. Das Ergebnis wären die ID, Mailadresse und Nickname des Benutzers mit der ID 1.
Doch falls in der Tabelle "userdata" kein Eintrag vorhanden ist, würde er mir gar kein Ergebnis liefern, selbst wenn es in der Tabelle "users" einen Eintrag gibt.
Ich würde aber gern trotzdem ein Ergebnis haben... das Feld "nickname" bleibt dann eben leer und ich kann in der Verarbeitung später immer noch prüfen, ob in "nickname" etwas drin steht.
Gibt es da eine Möglichkeit?
Gruß
Chris
Hi,
gibt es so etwas wie einen optionalen Join?
ja. Er nennt sich "outer".
Cheatah
Moin,
ja. Er nennt sich "outer".
ja, vielen Dank, mit dem "left outer" hat es geklappt. Nun hab ich mir allerdings noch was überlegt. Meine Abfrage sieht jetzt so aus:
SELECT A.id, B.nick
FROM users AS A LEFT OUTER
JOIN userdata AS B
ON B.id = A.id
WHERE A.id = '1'
Also kurz: Suche Benutzer ID 1 aus "users" und hole den Nickname (falls vorhanden) aus "userdata".
Jetzt die Ergänzung: Falls Nickname NULL ist, hole den Nickname aus der Tabelle "deletedUsers".
Ich bin mir nicht sicher, ob sowas überhaupt möglich ist, oder ob ich dann eine zusätzliche Abfrage brauche.
Ich hab probiert, die Abfrage zu ergänzen und einen Left Outer Join auf den jetzigen Join zu setzen, aber entweder war die Syntax falsch oder sowas gibts einfach nicht.
Kann mir da jemand einen Anstoß geben?
Gruß
Chris
yo,
Ich hab probiert, die Abfrage zu ergänzen und einen Left Outer Join auf den jetzigen Join zu setzen, aber entweder war die Syntax falsch oder sowas gibts einfach nicht.
geht mit verschiedenen möglichkeiten. auf jeden fall in der doku nach einer funktion schauen, die auf NULL Prüft, sowas wie ISNULL. diese funktion in verbindung mit einer korrelierten unterabfrage nutzen.
Ilja
Hi,
füge noch einen LEFT OUTER JOIN an und wende die Funktion COALESCE(ersterWert, zweiterWert, fünfhundertsiebenundzwanzigsterwert, irgendeindefaultwert) an.
COALESCE dürfte es unter mysql 5 geben.
Ciao, Frank