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
Libérer: 2025-01-04 00:32:40
original
1011 Les gens l'ont consulté

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
Copier après la connexion

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
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal