Heim > Datenbank > MySQL-Tutorial > Warum gibt mein linker äußerer Join mehr Datensätze zurück als die linke Tabelle?

Warum gibt mein linker äußerer Join mehr Datensätze zurück als die linke Tabelle?

Barbara Streisand
Freigeben: 2025-01-25 01:11:08
Original
145 Leute haben es durchsucht

Why Does My Left Outer Join Return More Records Than the Left Table?

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

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

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!

Quelle:php.cn
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