【发布时间】:2018-09-27 20:55:09
【问题描述】:
我在下面有一个小问题。 #t1 和#t2 是两张小桌子。我正在尝试为这两个表做一个简单的左连接,我看到了输出。
查询:
create table #t1 (cid int, program varchar(20), PP varchar(20), Startdate date, enddate date,codeset varchar(20),visitID int)
insert into #t1
values
(1001,'P1','ORD','2018-09-27','2018-09-28','OL',150),
(1001,'P2','ORD','2018-09-29',NULL,'IR',151)
create table #t2 (cid int,visitID int, answer varchar(20))
insert into #t2
values
(1001,150,'Credited')
select t1.cid, t1.Startdate, t1.Enddate,t2.answer
from #t1 t1
left join #t2 t2 on t1.cid = t2.cid
drop table #t1, #t2
输出是:
对于左连接的逻辑,左表中的所有记录和右表中的匹配记录都应该显示出来。 #t1 中不存在此类记录时,为什么我在第二行看到“已贷记”?
想要的输出:
我错过了一些愚蠢的东西,无法弄清楚。有什么帮助吗?!
【问题讨论】:
-
它在 CID 上加入,它在两行中,所以 Credited 显示在两行中
-
您加入
cid并且对于来自#t1的两行,cid是1001并且带有cid的行1001也存在于#t2中。所以它被连接到两行。这就是左连接的工作原理。 -
t2需要额外的列来指示它是连接到t1中的第一行还是第二行。如果没有这个条件,它将加入两者。 -
EndDate 告诉你什么?这对我来说毫无意义。这对它是否应该说 Credited 有重要意义吗?如果是这样,您需要将其包含在连接条件中
-
连接行为正确。另一方面,你的逻辑有问题。
标签: sql sql-server left-join