Heim > Datenbank > MySQL-Tutorial > Warum gibt mein SQL LEFT OUTER JOIN mehr Zeilen als die linke Tabelle zurück?

Warum gibt mein SQL LEFT OUTER JOIN mehr Zeilen als die linke Tabelle zurück?

Linda Hamilton
Freigeben: 2025-01-25 01:17:09
Original
752 Leute haben es durchsucht

Why Does My SQL LEFT OUTER JOIN Return More Rows Than the Left Table?

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
Nach dem Login kopieren

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:

  • Benötigen Sie nur Daten der linken Tabelle? Verwenden Sie einfach eine SELECT-Anweisung für die linke Tabelle ohne Verknüpfungen.
  • Duplikate eliminieren? Fügen Sie Ihrer 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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage