Heim >Datenbank >MySQL-Tutorial >Warum gibt mein T-SQL LEFT JOIN weniger Zeilen als erwartet zurück?
Warum liefert Ihr T-SQL Left Join nicht das erwartete Ergebnis?
In der bereitgestellten SQL-Abfrage, obwohl dazwischen ein LEFT JOIN verwendet wird Bei zwei Tabellen (#appSteps und #appProgress) werden statt der erwarteten drei nur zwei Zeilen zurückgegeben. Um die Ursache für dieses unerwartete Verhalten zu ermitteln, analysieren wir die Abfrage und ihre Komponenten.
Die LEFT JOIN-Operation zielt darauf ab, alle Zeilen aus der linken Tabelle (#appSteps) zurückzugeben, auch wenn sie keine entsprechenden Übereinstimmungen enthalten die richtige Tabelle (#appProgress). Die Abfrage enthält jedoch eine Bedingung in der WHERE-Klausel, die die NULL-Zeilen aus #appSteps herausfiltert:
where s.section is not null
Diese Bedingung begrenzt den Ergebnissatz versehentlich auf Zeilen, in denen #appSteps.section effektiv ungleich NULL ist Konvertieren des LEFT JOIN in einen INNER JOIN. Die Zeilen mit NULL-Werten in #appSteps.section werden ausgeschlossen, was dazu führt, dass die erwartete dritte Zeile fehlt.
Um dieses Problem zu beheben, sollte die Bedingung in die ON-Bedingung des LEFT JOIN verschoben werden:
Left Join #appProgress P On S.stepId = P.stepId And P.appId = 101
Durch die Angabe der Bedingung in der ON-Klausel wird sie Teil der Join-Kriterien und stellt sicher, dass nur übereinstimmende Zeilen aus #appSteps von #appProgress abgerufen werden. Folglich ruft der LEFT JOIN weiterhin alle Zeilen von #appSteps ab, einschließlich derjenigen mit NULL-Werten, unabhängig davon, ob sie mit #appProgress übereinstimmen.
Mit diesem Ansatz gibt die Abfrage wie ursprünglich die gewünschten drei Zeilen zurück beabsichtigt.
Das obige ist der detaillierte Inhalt vonWarum gibt mein T-SQL LEFT JOIN weniger Zeilen als erwartet zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!