首页 > 解决方案 > 左连接行为

问题描述

我在下面有一个小问题。#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 中不存在此类记录时,为什么我会在第二行看到“Credited”?

所需的输出:

在此处输入图像描述

我错过了一些愚蠢的东西,无法弄清楚。有什么帮助吗?!

标签: sqlsql-serverleft-join

解决方案


您正在看到预期的行为。您正在加入 CID。#t2 中的单个记录的 CID 值为 1001。这与 #t1 中的两条记录匹配,因为 #t1 中的两条记录的值均为 1001;因此,您的结果中有两行,列答案的值为 Credited。


推荐阅读