首页 >数据库 >mysql教程 >为什么我的 T-SQL LEFT JOIN 返回的行数少于预期?

为什么我的 T-SQL LEFT JOIN 返回的行数少于预期?

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-04 00:32:401001浏览

Why is my T-SQL LEFT JOIN Returning Fewer Rows Than Expected?

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn