Linke äußere Verknüpfungen und unerwartete Zeilenanzahlen: Ein genauerer Blick
In SQL-Datenbanken kombiniert ein Left Outer Join Daten aus zwei Tabellen und garantiert so die Einbeziehung aller Zeilen aus der linken Tabelle in die Ergebnismenge. Ein häufiges Missverständnis besteht jedoch darin, dass die Ausgabe immer die gleiche Anzahl an Zeilen wie die linke Tabelle haben wird. Das ist nicht unbedingt wahr.
Das Verhalten eines linken äußeren Joins besteht darin, jede Zeile aus der linken Tabelle mit den entsprechenden Zeilen in der rechten Tabelle abzugleichen. Wenn eine Übereinstimmung gefunden wird, werden die Daten aus beiden Tabellen in einer einzigen Zeile zusammengefasst. Entscheidend ist, dass, wenn in der rechten Tabelle keine Übereinstimmung für eine bestimmte Zeile in der linken Tabelle gefunden wird, diese linke Tabellenzeile weiterhin im Ergebnis enthalten ist, jedoch mit NULL
Werten für die Spalten aus der rechten Tabelle .
Die Diskrepanz entsteht, wenn eine einzelne Zeile in der linken Tabelle mit mehreren Zeilen in der rechten Tabelle übereinstimmt. In diesem Fall generiert der linke äußere Join mehrere Zeilen in der Ausgabe, eine für jede Übereinstimmung auf der rechten Seite, was zu einer Zeilenanzahl führt, die die der ursprünglichen linken Tabelle übersteigt.
Lassen Sie uns dies anhand einer Beispiel-SQL-Abfrage veranschaulichen:
<code class="language-sql">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</code>
Diese Abfrage soll ausschließlich Daten von SUSP.Susp_Visits
abrufen. Wenn jedoch ein MemID
in SUSP.Susp_Visits
mehreren Einträgen in DATA.Dim_Member
entspricht, enthält das Ergebnis mehrere Zeilen für jede dieser SUSP.Susp_Visits
-Zeilen.
Um diese überhöhte Zeilenanzahl zu vermeiden und nur die Daten aus der linken Tabelle abzurufen, ist eine einfachere Abfrage vorzuziehen:
<code class="language-sql">SELECT SuspReason, SiteID FROM SUSP.Susp_Visits</code>
Diese direkte Abfrage ruft die gewünschten Daten effizient ab, ohne dass es bei der Verarbeitung von Eins-zu-vielen-Beziehungen zwischen den Tabellen zu Abweichungen bei der Zeilenanzahl kommen kann, die dem Verhalten des linken äußeren Joins innewohnen.
Das obige ist der detaillierte Inhalt vonWarum gibt mein linker äußerer Join mehr Datensätze zurück als die linke Tabelle?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!