【发布时间】:2018-01-15 23:00:36
【问题描述】:
我在这里完全是个菜鸟,我确信答案是“嗯,嗯”,但我还是被难住了。
我正在从一个表中进行选择,并使用临时表中两个字段的组合来限制我通过将我的表与上述临时表连接起来带回的记录。
以下是我的查询:
<b>select distinct company3, dept</b>
into #compdept
from fss..budget
where fyr4 = @fyrin and fmo = @fprdin
--select * from #compdept
select
b.t_year as fyr4,
b.t_leac as acct,
b.t_cono as company3,
b.t_dim1 as dept,
b.t_fdam - t_fcam as curactamt,
b.t_fdam * 0 as curcmpamt,
b.t_fdam * 0 as ytdactamt,
b.t_fdam * 0 as ytdcmpamt
from baan5cdb..ttfgld205110 b
<b> left join #compdept a on a.company3 = b.t_cono
and a.dept = b.t_dim1</b> COLLATE SQL_Latin1_General_CP1_CI_AS
where b.t_year = @fyrin
and b.t_prno = @fprdin
我认为上面粗体部分会将我的结果集限制为仅存在于临时表中的公司和部门组合。
但是,我在查询结果中得到了公司 110,部门 029,并且公司 3 和部门的组合在临时表 #compdept 中不存在。
我做错了什么?
谢谢。
【问题讨论】:
-
使用内连接,而不是左外连接。外连接将允许表
a中的所有行,但内连接将只允许匹配的行 -
为什么使用左连接而不是内连接?是时候了解它们的作用了。
-
从你的临时表中尝试一个并离开加入 baan5cdb..ttfgld205110
标签: sql sql-server join left-join