Maison >base de données >tutoriel mysql >Pourquoi mon T-SQL LEFT JOIN renvoie-t-il moins de lignes que prévu ?
Pourquoi votre jointure gauche T-SQL ne produit-elle pas le résultat attendu ?
Dans la requête SQL fournie, malgré l'utilisation d'un LEFT JOIN entre deux tables (#appSteps et #appProgress), seules deux lignes sont renvoyées au lieu des trois attendues. Pour identifier la cause de ce comportement inattendu, analysons la requête et ses composants.
L'opération LEFT JOIN vise à renvoyer toutes les lignes de la table de gauche (#appSteps), même si elles n'ont pas de correspondances correspondantes dans la bonne table (#appProgress). Cependant, la requête inclut une condition dans la clause WHERE qui filtre les lignes NULL de #appSteps :
where s.section is not null
Cette condition limite par inadvertance l'ensemble de résultats aux lignes où #appSteps.section est non NULL, en fait convertir le LEFT JOIN en un INNER JOIN. Les lignes avec des valeurs NULL dans #appSteps.section sont exclues, ce qui entraîne l'absence de la troisième ligne attendue.
Pour remédier à ce problème, la condition doit être déplacée vers la condition ON de LEFT JOIN :
Left Join #appProgress P On S.stepId = P.stepId And P.appId = 101
En spécifiant la condition dans la clause ON, elle devient une partie des critères de jointure, garantissant que seules les lignes correspondantes de #appSteps sont récupérées depuis #appProgress. Par conséquent, LEFT JOIN récupérera toujours toutes les lignes de #appSteps, y compris celles avec des valeurs NULL, qu'elles correspondent ou non à #appProgress.
En utilisant cette approche, la requête renverra les trois lignes souhaitées, comme à l'origine. prévu.
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!