首页 > 数据库 > mysql教程 > 为什么我的左连接结果中缺少行?

为什么我的左连接结果中缺少行?

Barbara Streisand
发布: 2025-01-04 09:33:35
原创
407 人浏览过

Why are Rows Missing from my Left Join Result?

左连接差异:省略行

在此查询中,表 #appSteps 和 #appProgress 之间的 LEFT JOIN 出现故障,导致从结果集中排除预期行。

查询问题中:

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
登录后复制

预期结果:

appId stepId section start
101 1 Section 1 2016-01-03 00:00:00.000
101 2 Section 2 2016-01-03 00:00:00.000
101 10 Section 3 NULL

实际结果:

appId stepId section start
101 1 Section 1 2016-01-03 00:00:00.000
101 2 Section 2 2016-01-03 00:00:00.000

解决方案:

错误的行为是由于在 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 子句在联接之后执行,这意味着从右开始的行 -不满足 WHERE 子句条件的手表将从结果集中排除。在 WHERE 子句中包含右侧表可以有效地将其转换为 INNER JOIN,从而过滤掉预期结果。

以上是为什么我的左连接结果中缺少行?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板