SQL LEFT OUTER JOIN verstehen: Warum mehr Zeilen als die linke Tabelle?
Ein häufiges Missverständnis über LEFT OUTER JOIN
ist, dass immer die genaue Anzahl der Zeilen aus der linken Tabelle zurückgegeben wird. Es enthältalle Zeilen aus der linken Tabelle, kann aber tatsächlich mehr Zeilen erzeugen, wenn es in der rechten Tabelle doppelte Übereinstimmungen gibt.
Lassen Sie uns dies anhand eines Beispiels veranschaulichen:
Bedenken Sie diese Abfrage:
SELECT SUSP.Susp_Visits.SuspReason, SUSP.Susp_Visits.SiteID FROM SUSP.Susp_Visits LEFT OUTER JOIN DATA.Dim_Member ON SUSP.Susp_Visits.MemID = DATA.Dim_Member.MembershipNum
Diese Abfrage zielt darauf ab, Susp_Visits
(linke Tabelle) mit Dim_Member
(rechte Tabelle) zu verbinden. Intuitiv könnte man maximal 4935 Zeilen erwarten (vorausgesetzt, das ist die Anzahl von Susp_Visits
). Das tatsächliche Ergebnis könnte jedoch größer sein.
Der Grund dafür ist, dass ein LEFT OUTER JOIN
für jede Übereinstimmung zwischen der linken und rechten Tabelle eine Zeile im Ergebnissatz erstellt. Wenn eine einzelne Zeile in Susp_Visits
mit mehreren Zeilen in Dim_Member
übereinstimmt, wird sie in der Ausgabe dupliziert, was zu mehr Zeilen führt als ursprünglich erwartet.
Daher weist eine größer als erwartete Zeilenanzahl nach einem LEFT OUTER JOIN
darauf hin, dass mindestens eine Zeile in der linken Tabelle mehrere entsprechende Zeilen in der rechten Tabelle hat, basierend auf der Join-Bedingung.
Um dieses Problem zu beheben:
SELECT
-Anweisung für die linke Tabelle ohne Verknüpfungen.DISTINCT
-Anweisung eine SELECT
-Klausel hinzu: SELECT DISTINCT SUSP.Susp_Visits.SuspReason, SUSP.Susp_Visits.SiteID ...
Dadurch werden doppelte Zeilen aus der Ergebnismenge entfernt.Dies verdeutlicht das Verhalten von LEFT OUTER JOIN
und bietet Lösungen für den Umgang mit Situationen, in denen die Ergebnismenge die Anzahl der Zeilen in der linken Tabelle überschreitet.
Das obige ist der detaillierte Inhalt vonWarum gibt mein SQL LEFT OUTER JOIN mehr Zeilen als die linke Tabelle zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!