Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Warum funktioniert mein linker T-SQL-Join nicht?

Der Grund dafür ist, dass Sie die rechte Tabelle in WHERE einschließen Klausel. Sie sollten das auf ON verschieben Bedingung des LEFT 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

Der Grund dafür ist, dass WHERE -Klausel wird nach ausgewertet der LEFT JOIN , der dann Ihren NULL herausfiltert ergibt sich aus dem LEFT JOIN .

Einschließlich der rechten Tabelle eines LEFT JOIN (oder die linke Tabelle eines RIGHT JOIN ) im WHERE -Klausel transformiert effektiv den OUTER JOIN in einen INNER JOIN .