Maison >base de données >tutoriel mysql >Pourquoi des lignes manquent-elles dans mon résultat de jointure gauche ?

Pourquoi des lignes manquent-elles dans mon résultat de jointure gauche ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-04 09:33:35364parcourir

Why are Rows Missing from my Left Join Result?

Différence de jointure gauche : lignes omises

Dans cette requête, le LEFT JOIN entre les tables #appSteps et #appProgress fonctionne mal, ce qui entraîne le exclusion des lignes attendues de l'ensemble de résultats.

Requête dans Question :

select p.appId, s.stepId, s.section, p.start
from #appSteps s with (nolock)
left join #appProgress p on s.stepId = p.stepId
where s.section is not null
and p.appId = 101

Résultat attendu :

appId stepId section start
101 1 Section 1 2016-01-03 00:00:00.000
101 2 Section 2 2016-01-03 00:00:00.000
101 10 Section 3 NULL

Résultat réel :

appId stepId section start
101 1 Section 1 2016-01-03 00:00:00.000
101 2 Section 2 2016-01-03 00:00:00.000

Résolution :

Le comportement erroné résulte de l'inclusion du table de droite (#appProgress) dans la clause WHERE. En déplaçant cette condition vers la clause ON du LEFT JOIN, le résultat souhaité peut être obtenu :

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

Dans un LEFT JOIN, la clause WHERE est exécutée après la jointure, ce qui signifie que les lignes de droite- Les tables manuelles qui ne répondent pas aux critères de la clause WHERE seront exclues du jeu de résultats. L'inclusion de la table de droite dans la clause WHERE la transforme effectivement en INNER JOIN, filtrant les résultats attendus.

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