Maison >base de données >tutoriel mysql >Pourquoi mon T-SQL LEFT JOIN renvoie-t-il moins de lignes que prévu ?
La jointure gauche T-SQL ne donne pas les résultats attendus
Dans cette enquête, une opération LEFT JOIN entre deux tables, #appSteps et #appProgress , ne renvoie pas l'ensemble de résultats souhaité. L'ensemble de résultats prévu contient trois lignes, mais le résultat réel n'en contient que deux.
La requête SQL fournie est la suivante :
select p.appId, s.stepId, s.section, p.start from #appSteps s with (nolock) left join #appProgress p on s.stepId = p.stepId where s.section is not null and p.appId = 101
Le problème provient de l'inclusion de la partie droite table (#appProgress) dans la clause WHERE. Pour remédier à cela, la condition doit être déplacée vers la condition ON du 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
Cette modification garantit que la clause WHERE est évaluée après le LEFT JOIN, empêchant le filtrage des résultats NULL du rejoindre. En plaçant la condition dans la clause ON, LEFT JOIN se comporte effectivement comme prévu, renvoyant toutes les lignes de la table de gauche (#appSteps) avec les lignes correspondantes dans la table de droite (#appProgress) et des NULL pour les lignes sans correspondance.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!