Ich brauche Kunden mit Bestellung, aber jeden Kunden nur einmal
Lernfragen und Praxis · 6 Antworten
Beim JOIN erscheint ein Kunde mit drei Bestellungen dreimal. Ich brauche eigentlich nur die Aussage: Hat dieser Kunde mindestens eine Bestellung? DISTINCT macht die Liste kürzer, aber ich frage mich ob ich schon beim Ansatz falsch abbiege.
Antwort auf das Thema
Dafür passt EXISTS. Du wählst aus kunden und prüfst pro Kunde, ob eine passende Bestellung existiert. Die Bestellzeilen werden dann nicht Teil deiner Ergebnisliste.
Dafür passt EXISTS. Du wählst aus kunden und prüfst pro Kunde, ob eine passende Bestellung existiert. Die Bestellzeilen werden dann nicht Teil deiner Ergebnisliste.
Also ungefähr WHERE EXISTS (SELECT 1 FROM bestellungen b WHERE b.kunde_id = k.id)? Die 1 hat mich bisher irritiert. Steht die für die erste Bestellung?
Also ungefähr WHERE EXISTS (SELECT 1 FROM bestellungen b WHERE b.kunde_id = k.id)? Die 1 hat mich bisher irritiert. Steht die für die erste Bestellung?
Nein. Entscheidend ist, ob die Unterabfrage mindestens eine Zeile liefert. SELECT 1 beschreibt nur den ausgewählten Ausdruck; es begrenzt die Anzahl der gefundenen Bestellungen nicht.
Nein. Entscheidend ist, ob die Unterabfrage mindestens eine Zeile liefert. SELECT 1 beschreibt nur den ausgewählten Ausdruck; es begrenzt die Anzahl der gefundenen Bestellungen nic…
okay. Ich hatte die 1 im Kopf wie LIMIT 1 gelesen. Mit einem Kunden ohne Bestellung kann ich jetzt wenigstens den Gegenfall prüfen.
Antwort auf das Thema
DISTINCT wäre bei einer Auswahl nur der Kundenspalten nicht automatisch falsch. EXISTS drückt hier bloß unmittelbarer aus, wonach du suchst.
DISTINCT wäre bei einer Auswahl nur der Kundenspalten nicht automatisch falsch. EXISTS drückt hier bloß unmittelbarer aus, wonach du suchst.
Danke. Nicht jede funktionierende Abfrage braucht erst eine Gerichtsverhandlung. Aber die Absicht erkennen können ist schon nett.