Le code T-SQL fourni vise à effectuer une jointure gauche entre deux tables, #appSteps et #appProgress, mais l'ensemble de résultats ne contient que deux lignes au lieu de ce qui était attendu trois.
Problème
Le problème se pose car la table de droite (#appProgress) est incluse dans la clause WHERE :
where s.section is not null and p.appId = 101
Explication
Un LEFT JOIN est destiné à renvoyer toutes les lignes en partant de la gauche table, y compris ceux sans enregistrements correspondants dans la table de droite. Cependant, en incluant la table de droite dans la clause WHERE, la requête fonctionne effectivement comme une INNER JOIN, filtrant les lignes de la table de gauche sans faire correspondre les enregistrements de la table de droite.
Solution
Pour obtenir l'ensemble de résultats souhaité, déplacez la condition de filtre du tableau de droite vers la clause ON de GAUCHE 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
En plaçant la condition dans la clause ON, les lignes correspondantes des deux tables sont d'abord jointes, puis la clause WHERE est appliquée pour filtrer davantage les résultats, garantissant que seules les lignes avec une valeur non nulle les valeurs de la section sont renvoyées.
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!