Ich habe eine sehr einfache LEFT OUTER JOIN, um alle Ergebnisse aus der linken Tabelle und einige zusätzliche Informationen aus einer viel größeren Tabelle zurückzugeben. Die linke Tabelle enthält 4935 Datensätze, doch wenn ich einen LEFT OUTER JOIN mit einer zusätzlichen Tabelle durchführe, ist die Anzahl der Datensätze deutlich größer.
Soweit ich weiß, ist es ein absolutes Evangelium, dass ein LEFT OUTER JOIN alle Datensätze aus der linken Tabelle mit übereinstimmenden Datensätzen aus der rechten Tabelle und Nullwerten für alle Zeilen, die nicht übereinstimmen, zurückgibt, so dass es nach meinem Verständnis unmöglich sein sollte, mehr Zeilen zurückzugeben, als in der linken Tabelle vorhanden sind, aber es passiert trotzdem!
Es folgt eine SQL-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
Vielleicht habe ich einen Fehler in der Syntax oder mein Verständnis von LEFT OUTER JOIN ist unvollständig, hoffentlich kann jemand erklären, wie dies auftreten könnte?
Nachtrag
Vielen Dank für die großartigen Antworten, mein Verständnis von LEFT OUTER JOINS ist jetzt viel besser, könnte jemand jedoch eine Möglichkeit vorschlagen, diese Abfrage geändert werden könnte, so dass ich nur so viele Datensätze zurückgegeben, wie in der linken Tabelle vorhanden?
Diese Abfrage dient lediglich dazu, einen Bericht zu erstellen, und die doppelten Treffer verwirren die Sache nur.
/Postskript
7 Stimmen
Um "so viele Datensätze zurückzubekommen, wie in der linken Tabelle vorhanden sind", müssen Sie angeben, welche Zeile auf der rechten Seite ausgewählt werden soll, wenn es mehrere Übereinstimmungen gibt.
1 Stimmen
Wie spezifizieren Sie dies? Ich möchte, dass der erste Treffer zurückgegeben wird.
1 Stimmen
Sie müssen definieren, was unter dem ersten Spiel zu verstehen ist. Wollen Sie den frühesten Datensatz, den mit der höchsten ID oder was?
3 Stimmen
Wenn Sie mit dem Primärschlüssel in der Zusatztabelle übereinstimmen, ist Ihre Aussage richtig.
0 Stimmen
Ich verwende oft eine Ressource wie este als Spickzettel bei der Erstellung von Abfragen. Wenn der Link jemals stirbt, einfach googeln sql join Es handelt sich um Venn-Diagramme für die verschiedenen Arten von Verbindungen.
0 Stimmen
Erfahren Sie, was LEFT JOIN ON ergibt: INNER JOIN ON rows UNION ALL unmatched left table rows extended by NULLs. Wissen Sie immer, welchen INNER JOIN ON Sie als Teil eines OUTER JOIN ON wünschen.