为什么你的 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中文网其他相关文章!