Maison >base de données >tutoriel mysql >Pourquoi mon T-SQL LEFT JOIN ne renvoie-t-il que deux lignes au lieu de trois ?

Pourquoi mon T-SQL LEFT JOIN ne renvoie-t-il que deux lignes au lieu de trois ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-06 00:55:39978parcourir

Why is my T-SQL LEFT JOIN only returning two rows instead of three?

Jointure gauche ne donnant pas les résultats attendus

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!

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