Maison >base de données >tutoriel mysql >Pourquoi mon LEFT JOIN dans SQL renvoie-t-il des résultats inattendus ?
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!