gpt4 book ai didi

sql - 为什么我的 t-sql 左连接不起作用?

转载 作者:行者123 更新时间:2023-12-02 17:36:46 26 4
gpt4 key购买 nike

你能运行这个并告诉我为什么结果集只有两行。它应该有三个,看起来像这样......

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

这是 SQL,因此您可以将其粘贴到查询工具中

create table #appSteps(stepId decimal, section nvarchar(50))
insert into #appSteps (stepId, section) values (1, 'Section 1')
insert into #appSteps (stepId, section) values (2, 'Section 2')
insert into #appSteps (stepId, section) values (3, null)
insert into #appSteps (stepId, section) values (4, null)
insert into #appSteps (stepId, section) values (10, 'Section 3')

create table #appProgress(stepId decimal, appId int, start datetime)
insert into #appProgress (stepId, appId, start) values (1, 101, '1/3/2016')
insert into #appProgress (stepId, appId, start) values (2, 101, '1/3/2016')
insert into #appProgress (stepId, appId, start) values (3, 101, '1/3/2016')
insert into #appProgress (stepId, appId, start) values (4, 101, '1/3/2016')


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

drop table #appSteps
drop table #appProgress

我不明白为什么 #appSteps 中的所有 3 个非空行都没有返回

最佳答案

原因是您在 WHERE 子句中包含了右侧表。您应该将其移至 LEFT JOINON 条件:

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

这样做的原因是因为 WHERE 子句是在 LEFT JOIN 之后评估的,然后过滤掉 NULL 来自 LEFT JOIN 的结果。

WHERE 子句中包含 LEFT JOIN 的右侧表(或 RIGHT JOIN 的左侧表)有效地将 OUTER JOIN 转换为 INNER JOIN

关于sql - 为什么我的 t-sql 左连接不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40093809/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com