首頁 >資料庫 >mysql教程 >為什麼 SQL 中的 LEFT JOIN 會回傳意外結果?

為什麼 SQL 中的 LEFT JOIN 會回傳意外結果?

Patricia Arquette
Patricia Arquette原創
2024-12-31 14:52:14878瀏覽

Why is My LEFT JOIN in SQL Returning Unexpected Results?

了解LEFT JOIN:為什麼您的SQL 查詢沒有返回預期結果

在SQL 中使用LEFT JOIN 時,認識到其獨特特徵和潛在陷阱至關重要。這個問題說明了一個範例,其中 LEFT JOIN 查詢傳回意外結果,促使我們深入研究底層機制並解決問題。

LEFT JOIN 操作會從左表中檢索所有行(在本例中, #appSteps),無論它是否與右表(#appProgress)相符。右表中任何不匹配的行都會被指派 NULL 值。但是,當您在 WHERE 子句 (p.appId = 101) 中包含正確的資料表時,您實際上會將查詢轉換為 INNER JOIN。

解:

要修正問題,需要將過濾右表(p.appId = 101)的謂詞從WHERE 子句移至ON LEFT JOIN 語句的條件。這會強制連接在執行連接之前過濾正確的表,確保僅包含匹配的行。

調整後的SQL 語句如下:

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

透過將查詢調整為正確利用LEFT JOIN 功能,它將產生預期的結果,包括#appSteps 中的所有非空白行和#appProgress 中的符合行,而不會因為額外的原因而無意中排除行WHERE 子句中的謂詞。

以上是為什麼 SQL 中的 LEFT JOIN 會回傳意外結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn