為什麼你的 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中文網其他相關文章!