首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >场景中各种连接的结果

场景中各种连接的结果
EN

Stack Overflow用户
提问于 2019-03-28 12:14:12
回答 1查看 26关注 0票数 1

我有两个表test1和test2,这两个表都有包含一些值的单列。

我已经应用了内部和外部连接,但与输出有混淆。

代码语言:javascript
运行
复制
Create table test1
( id int)
insert into test1 values (1)
insert into test1 values (1)
insert into test1 values (1)


Create table test2
( id int)
insert into test2 values (1)
insert into test2 values (1)
insert into test2 values (NULL)

select a.id from test1 a inner join test2 b on a.id = b.id

我在期待,

代码语言:javascript
运行
复制
1
1
Null

作为内部连接、左连接和右连接的输出。

但最初的产出是,

代码语言:javascript
运行
复制
1
1
1
1
1
1

你能帮我理解一下所有的连接吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-28 12:29:05

test1中的三个1s中的每个1s都与test2中的两个1s中的每个1s连接,这产生了结果集中的3x2=6行。test1中的第一、第二和第三1之间没有什么不同,在test2中第一和第二1没有什么不同。

此外,请记住以下所有条件:

代码语言:javascript
运行
复制
NULL = 1
NULL <> 1
NULL = NULL
NULL <> NULL

都是假的。在一侧具有空值的所有条件都将计算为false。这是因为NULL表示未知值。

正如你所看到的,你所期望的是完全错误的。您似乎预期test1的第一行将与test2的第一行相结合,依此类推。在sql中没有这样的“魔力”--联接的整个逻辑都放在ON子句中,该子句与前面所述的1s连接在一起。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55397380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档