Der bereitgestellte T-SQL-Code zielt darauf ab, einen linken Join zwischen zwei Tabellen, #appSteps und #appProgress, durchzuführen, aber der Ergebnismenge enthält statt der erwarteten nur zwei Zeilen drei.
Problem
Das Problem tritt auf, weil die rechte Tabelle (#appProgress) in der WHERE-Klausel enthalten ist:
where s.section is not null and p.appId = 101
Erklärung
Ein LEFT JOIN soll alle Zeilen von links zurückgeben Tabelle, einschließlich derjenigen ohne übereinstimmende Datensätze in der rechten Tabelle. Durch die Einbeziehung der rechten Tabelle in die WHERE-Klausel funktioniert die Abfrage jedoch effektiv wie ein INNER JOIN und filtert Zeilen aus der linken Tabelle heraus, ohne dass Datensätze in der rechten Tabelle übereinstimmen.
Lösung
Um die gewünschte Ergebnismenge zu erhalten, verschieben Sie die Filterbedingung für die rechte Tabelle in die ON-Klausel der LINKEN JOIN:
Select P.appId, S.stepId, S.section, P.start From #appSteps S With (NoLock) Left Join #appProgress P On S.stepId = P.stepId And P.appId = 101 Where S.section Is Not Null
Durch Platzieren der Bedingung in der ON-Klausel werden zuerst übereinstimmende Zeilen aus beiden Tabellen verbunden, und dann wird die WHERE-Klausel angewendet, um die Ergebnisse weiter zu filtern und sicherzustellen, dass nur Zeilen mit einem Wert ungleich Null verwendet werden Es werden Werte für den Abschnitt zurückgegeben.
Das obige ist der detaillierte Inhalt vonWarum gibt mein T-SQL LEFT JOIN nur zwei statt drei Zeilen zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!