Heim >Datenbank >MySQL-Tutorial >Warum fehlen Zeilen in meinem Left-Join-Ergebnis?

Warum fehlen Zeilen in meinem Left-Join-Ergebnis?

Barbara Streisand
Barbara StreisandOriginal
2025-01-04 09:33:35425Durchsuche

Why are Rows Missing from my Left Join Result?

Diskrepanz beim linken Join: Zeilen weggelassen

In dieser Abfrage funktioniert der LEFT JOIN zwischen den Tabellen #appSteps und #appProgress nicht richtig, was dazu führt, dass Ausschluss erwarteter Zeilen aus der Ergebnismenge.

Abfrage in Frage:

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

Erwartetes Ergebnis:

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

Tatsächliches Ergebnis:

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

Lösung:

Das fehlerhafte Verhalten tritt auf davon ab, die rechte Tabelle (#appProgress) in die WHERE-Klausel aufzunehmen. Durch Verschieben dieser Bedingung in die ON-Klausel des LEFT JOIN kann das gewünschte Ergebnis erzielt werden:

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

Bei einem LEFT JOIN wird die WHERE-Klausel nach dem Join ausgeführt, was bedeutet, dass Zeilen von rechts- Handtabellen, die die Kriterien der WHERE-Klausel nicht erfüllen, werden aus der Ergebnismenge ausgeschlossen. Durch das Einschließen der rechten Tabelle in die WHERE-Klausel wird diese effektiv in einen INNER JOIN umgewandelt und die erwarteten Ergebnisse herausgefiltert.

Das obige ist der detaillierte Inhalt vonWarum fehlen Zeilen in meinem Left-Join-Ergebnis?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn