Maison >base de données >tutoriel mysql >Pourquoi mon LEFT JOIN dans SQL renvoie-t-il des résultats inattendus ?

Pourquoi mon LEFT JOIN dans SQL renvoie-t-il des résultats inattendus ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-31 14:52:14889parcourir

Why is My LEFT JOIN in SQL Returning Unexpected Results?

Comprendre LEFT JOIN : pourquoi votre requête SQL ne renvoie pas les résultats attendus

Lors de l'utilisation d'un LEFT JOIN dans SQL, il est crucial de reconnaître ses caractéristiques uniques et ses pièges potentiels. . Cette question illustre un exemple dans lequel une requête LEFT JOIN renvoie des résultats inattendus, nous invitant à approfondir les mécanismes sous-jacents et à résoudre le problème.

L'opération LEFT JOIN récupère toutes les lignes de la table de gauche (dans ce cas, #appSteps), qu'il corresponde ou non à la bonne table (#appProgress). Toutes les lignes qui ne correspondent pas dans le tableau de droite se voient attribuer des valeurs NULL. Cependant, lorsque vous incluez la bonne table dans la clause WHERE (p.appId = 101), vous transformez essentiellement la requête en INNER JOIN.

La solution :

Pour remédier au problème, le prédicat qui filtre la bonne table (p.appId = 101) doit être déplacé de la clause WHERE vers la condition ON du Instruction LEFT JOIN. Cela force la jointure à filtrer la bonne table avant d'effectuer la jointure, garantissant que seules les lignes correspondantes sont incluses.

L'instruction SQL ajustée est la suivante :

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 ajustant la requête à utilisez correctement la fonctionnalité LEFT JOIN, cela produira les résultats attendus, y compris toutes les lignes non nulles de #appSteps et les lignes correspondantes de #appProgress, sans exclure par inadvertance les lignes dues à des prédicats supplémentaires dans la clause WHERE.

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