Maison >base de données >tutoriel mysql >Pourquoi mon T-SQL LEFT JOIN renvoie-t-il moins de lignes que prévu ?

Pourquoi mon T-SQL LEFT JOIN renvoie-t-il moins de lignes que prévu ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-04 00:32:40978parcourir

Why is my T-SQL LEFT JOIN Returning Fewer Rows Than Expected?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn