Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Perché il mio join sinistro t-sql non funziona?

Il motivo è perché stai includendo la tabella di destra nel WHERE clausola. Dovresti spostarlo su ON condizione del 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

Il motivo per cui lo fa è perché WHERE la clausola viene valutata dopo il LEFT JOIN , che quindi filtra il tuo NULL risultati dal LEFT JOIN .

Compresa la tabella di destra di un LEFT JOIN (o la tabella di sinistra di un RIGHT JOIN ) nel WHERE La clausola trasforma efficacemente il OUTER JOIN in un INNER JOIN .