提供的 T-SQL 代码旨在在 #appSteps 和 #appProgress 两个表之间执行左连接,但结果集仅包含两行,而不是预期的三.
问题
出现这个问题是因为WHERE子句中包含了右侧表(#appProgress):
where s.section is not null and p.appId = 101
解释
左连接旨在返回左表中的所有行,包括右表中没有匹配记录的行。但是,通过在 WHERE 子句中包含右侧表,查询可以像 INNER JOIN 一样有效地运行,过滤掉左侧表中没有匹配右侧表中记录的行。
解决方案
要获得想要的结果集,请将右侧表的过滤条件移至左侧表的 ON 子句JOIN:
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
通过将条件放在ON子句中,首先连接两个表中匹配的行,然后应用WHERE子句进一步过滤结果,确保只有非空的行返回部分的值。
以上是为什么我的 T-SQL LEFT JOIN 只返回两行而不是三行?的详细内容。更多信息请关注PHP中文网其他相关文章!