SQL-Abfrage auf 3 Tabellen wo eine leer sein kann

gander

Mitglied
Hallo,

ich habe ein kleines Problem.
Entweder stehe ich grad voll aufm schlauch oder es ist doch koplizierter als ich gedacht hab.
Also ich hab sagen wir mal drei Tabellen:
Tabelle1(id, name), Tabelle2(id, alter) und Tabelle3(id, haarfarbe)
In Tabelle1 speicher ich zum beispiel eine Person, in Tabelle zwei das alter der Person und in tabelle 3 die Haarfarbe.
Jetzt möchte ich alles über die Person ausgeben, das würde ich dann ja so machen:
SQL:
SELECT * FROM Tabelle1 as 1, Tabelle2 as 2, Tabelle3 as 3 WHERE 1.name LIKE 'TOM' AND 1.id=2.id, AND 2.id = 3.id;

So wenn jetzt aber einer Person keine Haarfarbe zugeordnet wäre, dann bekomm ich nix angezeigt.
Wie kann ich da die Abfrage anpassen, dass ich ein Ergebnis angezeigt bekomme auch wenn in einer von den 3 Tabellen keine Daten zu der Person stehen?
ich hoffe ihr versth was ich meine.


gruß
Gander
 
Zuletzt bearbeitet von einem Moderator:
item: Bitte SQL-Code in SQL-Tags schreiben.
item: Nur eine Nummer als Alias finde ich sehr heikel. Nimm besser ein Name oder ein t1, t2 etc.

Du kannst das mit einem LEFT JOIN lösen
SQL:
SELECT *
FROM
  tabelle1 AS t1
  LEFT JOIN tabelle2 AS t2
    ON t1.id = t2.id
  LEFT JOIN tabelle3 AS t3
    ON t1.id = t3.id
 
Zuletzt bearbeitet von einem Moderator:
In dem du anstelle eines inner joins einen left join machst.

SQL:
SELECT * FROM Tabelle1 as t1
LEFT JOIN Tabelle2 as t2 ON t1.id=t2.id
LEFT JOIN Tabelle3 as t3 ON t1.id=t3.id
WHERE t1.name LIKE 'TOM'
 
Hab den SQL -Befehl jetzt mal so zusammengebaut wie ich ihn brauch, bekomme jetzt aber den Fehler:Syntyxfehler(fehlernder Operator)

SQL:
SELECT b.geraetenr, a.serialnr, b.materialnr, b.hardware_id, d.kundennr, d.kunden_bezeichnung, a.auftragsnr, a.auftragspos, a.kunden_bestellnr,      a.bestell_datum, b.erzeugnisnr, b.lizenz, b.lizenziert_nachname, b.lizenziert_vorname, b.lizenziert_aktion, b.lizenziert_datum, g.status_kurzzeichen, g.status, z.zustaendiger_mitarbeiter     
FROM bsl AS b 
LEFT JOIN auftinfo AS a ON b.geraetenr = a.geraetenr 
LEFT JOIN geraetestatus AS g ON a.geraetenr = g.geraetenr 
LEFT JOIN zustmitarbeiter AS z ON z.kundennr = p.adressnr 
LEFT JOIN partner AS p ON p.geraetenr = a.geraetenr 
LEFT JOIN deb AS d ON d.kundennr = p.adressnr 
WHERE b.geraetenr LIKE '*83769'

weiß jetzt aber nicht woran das liegen kann, dass ich den fehler bekomm.
Ich hab doch alles angegeben.
könnt Ihr da einen fehler erkennen?
 
Zuletzt bearbeitet von einem Moderator:
Zurück