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
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!