T-SQL Left Join 未產生預期結果
在此查詢中,#appSteps 與#appProgress 兩個表之間的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 where s.section is not null and p.appId = 101
問題源自於包含右側WHERE 子句中的資料表 (#appProgress)。若要修正此問題,條件應移至 LEFT JOIN 的 ON 條件:
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 之後計算 WHERE 子句,從而防止從 LEFT JOIN 中過濾出 NULL 結果加入。透過將條件放在 ON 子句中,LEFT JOIN 可以有效地按預期運行,返回左表 (#appSteps) 中的所有行以及右表 (#appProgress) 中的匹配行,以及不匹配行的 NULL。
以上是為什麼我的 T-SQL LEFT JOIN 回傳的行數少於預期?的詳細內容。更多資訊請關注PHP中文網其他相關文章!