Heim >Datenbank >MySQL-Tutorial >Warum gibt mein T-SQL LEFT JOIN weniger Zeilen als erwartet zurück?

Warum gibt mein T-SQL LEFT JOIN weniger Zeilen als erwartet zurück?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-04 00:32:401018Durchsuche

Why is my T-SQL LEFT JOIN Returning Fewer Rows Than Expected?

Warum liefert Ihr T-SQL Left Join nicht das erwartete Ergebnis?

In der bereitgestellten SQL-Abfrage, obwohl dazwischen ein LEFT JOIN verwendet wird Bei zwei Tabellen (#appSteps und #appProgress) werden statt der erwarteten drei nur zwei Zeilen zurückgegeben. Um die Ursache für dieses unerwartete Verhalten zu ermitteln, analysieren wir die Abfrage und ihre Komponenten.

Die LEFT JOIN-Operation zielt darauf ab, alle Zeilen aus der linken Tabelle (#appSteps) zurückzugeben, auch wenn sie keine entsprechenden Übereinstimmungen enthalten die richtige Tabelle (#appProgress). Die Abfrage enthält jedoch eine Bedingung in der WHERE-Klausel, die die NULL-Zeilen aus #appSteps herausfiltert:

where s.section is not null

Diese Bedingung begrenzt den Ergebnissatz versehentlich auf Zeilen, in denen #appSteps.section effektiv ungleich NULL ist Konvertieren des LEFT JOIN in einen INNER JOIN. Die Zeilen mit NULL-Werten in #appSteps.section werden ausgeschlossen, was dazu führt, dass die erwartete dritte Zeile fehlt.

Um dieses Problem zu beheben, sollte die Bedingung in die ON-Bedingung des LEFT JOIN verschoben werden:

Left Join #appProgress P   On  S.stepId = P.stepId 
                           And P.appId = 101

Durch die Angabe der Bedingung in der ON-Klausel wird sie Teil der Join-Kriterien und stellt sicher, dass nur übereinstimmende Zeilen aus #appSteps von #appProgress abgerufen werden. Folglich ruft der LEFT JOIN weiterhin alle Zeilen von #appSteps ab, einschließlich derjenigen mit NULL-Werten, unabhängig davon, ob sie mit #appProgress übereinstimmen.

Mit diesem Ansatz gibt die Abfrage wie ursprünglich die gewünschten drei Zeilen zurück beabsichtigt.

Das obige ist der detaillierte Inhalt vonWarum gibt mein T-SQL LEFT JOIN weniger Zeilen als erwartet 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