Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Sql LEFT OUTER JOIN avec la clause WHERE

Déplacez la contrainte vers votre clause on.

select *
from request r
left join requestStatus rs
on r.requestID = rs.requestID
--and status_id = 1
and status_id <> 2

Ce qui vous arrive, c'est que la jointure externe est effectuée en premier. Toutes les lignes provenant de la jointure externe qui n'ont pas de correspondances auront des valeurs nulles dans toutes les colonnes. Ensuite, votre clause where est appliquée, mais puisque 1 <> null, cela ne fonctionnera pas comme vous le souhaitez.

EDIT :Modification de la clause basée sur le commentaire de Piyush.