LEFT OUTER JOIN Problem: Die Anzahl der Datensätze überschreitet die linke Tabelle?
Während allgemein angenommen wird, dass ein LEFT OUTER JOIN immer alle Datensätze aus der linken Tabelle zurückgibt, war ein Benutzer verwirrt, als die Abfrage mehr Ergebnisse als erwartet zurückgab.
Die betreffende SQL-Abfrage:
<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>
Entdecken Sie die Wahrheit:
Das Missverständnis ist die Annahme, dass ein LEFT OUTER JOIN nur NULL-Werte für nicht übereinstimmende Zeilen in der linken Tabelle zurückgibt. Tatsächlich werden alle übereinstimmenden Zeilen zurückgegeben, auch wenn mehrere Zeilen aus der rechten Tabelle mit einer Zeile aus der linken Tabelle übereinstimmen.
Beispiel:
Betrachten Sie das folgende Formular:
**Susp_Visits** | **Dim_Member** | |
---|---|---|
MemID: 1 | MembershipNum: 1 | |
MemID: 1 | MembershipNum: 2 | |
MemID: 2 | MembershipNum: NULL |
Ein LEFT OUTER JOIN basierend auf MemID führt zu folgenden Ergebnissen:
**SuspReason** | **SiteID** | **MembershipNum** |
---|---|---|
1 | 1 | 1 |
1 | 1 | 2 |
2 | 2 | NULL |
Wie Sie sehen können, wird die Zeile mit Susp_Visits.SuspReason von 1 dupliziert, da sie mit zwei Zeilen in Dim_Member übereinstimmt.
Alternative:
Wenn das gewünschte Ergebnis darin besteht, nur die eindeutige Zeile aus der linken Tabelle abzurufen, ist kein LEFT OUTER JOIN erforderlich. Führen Sie einfach eine einfache SELECT-Anweisung aus der Tabelle links aus:
<code class="language-sql">SELECT SuspReason, SiteID FROM SUSP.Susp_Visits</code>
Das obige ist der detaillierte Inhalt vonLinkes äußeres Join -Puzzle: Warum mehr Ergebnisse als linke Tabellenaufzeichnungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!