LEFT JOIN: Warum fehlen Kunden ohne Bestellung?

Lernfragen und Praxis · 2 Antworten

STARTBEITRAG

#1

ich dreh mich bei dem JOIN im Kreis. Ich will alle Kunden und ihre offenen Bestellungen sehen, auch die Kunden ohne Bestellung.

sql
SELECT k.id, b.id AS bestellung_id
FROM kunden k
LEFT JOIN bestellungen b ON b.kunde_id = k.id
WHERE b.status = 'offen';

Ohne WHERE sind alle da. Mit WHERE fehlen welche. Dachte genau das verhindert LEFT JOIN?

0

Antworten

2
Antwort auf das Thema
#2

Bei einem Kunden ohne passende Bestellung ist b.status NULL. Der WHERE-Vergleich mit 'offen' ist dann nicht wahr, also fliegt die Zeile raus.

Schieb die Bedingung ins ON:

sql
LEFT JOIN bestellungen b
  ON b.kunde_id = k.id AND b.status = 'offen'

So begrenzt du die passenden Bestellungen, behältst aber die Kunden ohne Treffer.

0
Antwort auf Antwort

Antwort auf #2 von jonas_sql

Bei einem Kunden ohne passende Bestellung ist b.status NULL. Der WHERE-Vergleich mit 'offen' ist dann nicht wahr, also fliegt die Zeile raus. Schieb die Bedingung ins ON: ```sql LE…
#3

Noch ein Testfall: ein Kunde mit zwei offenen Bestellungen. Der kommt zweimal. Für die Kontrolle also nicht erwarten, dass die Ergebniszahl genau der Kundenzahl entspricht.

0