Heim > Datenbank > MySQL-Tutorial > Warum gibt mein LEFT JOIN in SQL unerwartete Ergebnisse zurück?

Warum gibt mein LEFT JOIN in SQL unerwartete Ergebnisse zurück?

Patricia Arquette
Freigeben: 2024-12-31 14:52:14
Original
878 Leute haben es durchsucht

Why is My LEFT JOIN in SQL Returning Unexpected Results?

LEFT JOIN verstehen: Warum Ihre SQL-Abfrage nicht die erwarteten Ergebnisse liefert

Bei der Verwendung eines LEFT JOIN in SQL ist es wichtig, seine einzigartigen Eigenschaften und potenziellen Fallstricke zu erkennen . Diese Frage veranschaulicht ein Beispiel, bei dem eine LEFT JOIN-Abfrage unerwartete Ergebnisse zurückgibt, was uns dazu veranlasst, uns mit den zugrunde liegenden Mechanismen zu befassen und das Problem zu beheben.

Die LEFT JOIN-Operation ruft alle Zeilen aus der linken Tabelle ab (in diesem Fall #appSteps), unabhängig davon, ob es mit der richtigen Tabelle (#appProgress) übereinstimmt. Allen nicht übereinstimmenden Zeilen in der rechten Tabelle werden NULL-Werte zugewiesen. Wenn Sie jedoch die richtige Tabelle in die WHERE-Klausel einschließen (p.appId = 101), wandeln Sie die Abfrage im Wesentlichen in einen INNER JOIN um.

Die Lösung:

Um das Problem zu beheben, muss das Prädikat, das die rechte Tabelle filtert (p.appId = 101), von der WHERE-Klausel in die ON-Bedingung der LEFT verschoben werden JOIN-Anweisung. Dadurch wird der Join gezwungen, die richtige Tabelle zu filtern, bevor der Join ausgeführt wird, um sicherzustellen, dass nur übereinstimmende Zeilen enthalten sind.

Die angepasste SQL-Anweisung lautet wie folgt:

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
Nach dem Login kopieren

Durch Anpassen der Abfrage an Wenn Sie die LEFT JOIN-Funktionalität korrekt nutzen, werden die erwarteten Ergebnisse erzielt, einschließlich aller Nicht-Null-Zeilen von #appSteps und der übereinstimmenden Zeilen von #appProgress, ohne versehentlich Zeilen aufgrund zusätzlicher auszuschließen Prädikate in der WHERE-Klausel.

Das obige ist der detaillierte Inhalt vonWarum gibt mein LEFT JOIN in SQL unerwartete Ergebnisse zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage