sql - 左连接行为
问题描述
我在下面有一个小问题。#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”?
所需的输出:
我错过了一些愚蠢的东西,无法弄清楚。有什么帮助吗?!
解决方案
您正在看到预期的行为。您正在加入 CID。#t2 中的单个记录的 CID 值为 1001。这与 #t1 中的两条记录匹配,因为 #t1 中的两条记录的值均为 1001;因此,您的结果中有两行,列答案的值为 Credited。
推荐阅读
- java - 无法在硒测试中调用自定义注释
- c - 使用 MPI (C) 发送和接收 3D 矩阵
- arrays - 在 Groovy 中动态创建二维数组
- reactjs - React:从先前的状态构建动态表单并在其上处理错误。状态错误
- c# - 'system.stackoverflowexception' 类型的异常在 c# 中被 OpenGL 抛出
- c# - 为什么物体向下移动而不是向上移动?
- python-3.x - ldap3 查询组用户不返回用户数据
- c# - C# 获取文件类型的默认应用程序
- javascript - Native Base 如何获取 List dataArray 的 ListItem 索引?
- python-3.x - 如何在python 3.6.5中通过变量创建子元素