Heim >Datenbank >MySQL-Tutorial >Warum gibt mein T-SQL LEFT JOIN nur zwei statt drei Zeilen zurück?

Warum gibt mein T-SQL LEFT JOIN nur zwei statt drei Zeilen zurück?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-06 00:55:39976Durchsuche

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

Linker Join liefert nicht die erwarteten Ergebnisse

Der bereitgestellte T-SQL-Code zielt darauf ab, einen linken Join zwischen zwei Tabellen, #appSteps und #appProgress, durchzuführen, aber der Ergebnismenge enthält statt der erwarteten nur zwei Zeilen drei.

Problem

Das Problem tritt auf, weil die rechte Tabelle (#appProgress) in der WHERE-Klausel enthalten ist:

where s.section is not null
and p.appId = 101

Erklärung

Ein LEFT JOIN soll alle Zeilen von links zurückgeben Tabelle, einschließlich derjenigen ohne übereinstimmende Datensätze in der rechten Tabelle. Durch die Einbeziehung der rechten Tabelle in die WHERE-Klausel funktioniert die Abfrage jedoch effektiv wie ein INNER JOIN und filtert Zeilen aus der linken Tabelle heraus, ohne dass Datensätze in der rechten Tabelle übereinstimmen.

Lösung

Um die gewünschte Ergebnismenge zu erhalten, verschieben Sie die Filterbedingung für die rechte Tabelle in die ON-Klausel der LINKEN 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

Durch Platzieren der Bedingung in der ON-Klausel werden zuerst übereinstimmende Zeilen aus beiden Tabellen verbunden, und dann wird die WHERE-Klausel angewendet, um die Ergebnisse weiter zu filtern und sicherzustellen, dass nur Zeilen mit einem Wert ungleich Null verwendet werden Es werden Werte für den Abschnitt zurückgegeben.

Das obige ist der detaillierte Inhalt vonWarum gibt mein T-SQL LEFT JOIN nur zwei statt drei Zeilen zurück?. 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