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中文网其他相关文章!