首頁 >資料庫 >mysql教程 >為什麼我的 T-SQL LEFT JOIN 回傳的行數少於預期?

為什麼我的 T-SQL LEFT JOIN 回傳的行數少於預期?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-04 00:32:40978瀏覽

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

為什麼你的 T-SQL 左連結沒有產生預期的結果?

在提供的 SQL 查詢中,儘管在之間使用了 LEFT JOIN兩個表(#appSteps 和 #appProgress),僅傳回兩行,而不是預期的三行。為了確定這種意外行為的原因,讓我們分析查詢及其組件。

LEFT JOIN 操作旨在傳回左表 (#appSteps) 中的所有行,即使它們在右表(#appProgress)。但是,查詢在WHERE 子句中包含一個條件,該條件從#appSteps 中過濾掉NULL 行:

where s.section is not null

此條件無意中將結果集限制為#appSteps.section 不為NULL 的行,實際上將LEFT JOIN 轉換為INNER JOIN。 #appSteps.section 中具有 NULL 值的行被排除,導致缺少預期的第三行。

要修正此問題,應將條件移至LEFT JOIN 的ON 條件:

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

透過在ON 子句中指定條件,它成為聯接條件的一部分,確保僅從#appSteps 中取得符合的行#appProgress。因此,LEFT JOIN 仍會擷取 #appSteps 中的所有行,包括具有 NULL 值的行,無論它們是否符合 #appProgress。

透過使用此方法,查詢將傳回所需的三行,與最初一樣有意為之。

以上是為什麼我的 T-SQL LEFT JOIN 回傳的行數少於預期?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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