我有两个表test1和test2,这两个表都有包含一些值的单列。
我已经应用了内部和外部连接,但与输出有混淆。
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我在期待,
1
1
Null作为内部连接、左连接和右连接的输出。
但最初的产出是,
1
1
1
1
1
1你能帮我理解一下所有的连接吗?
发布于 2019-03-28 12:29:05
test1中的三个1s中的每个1s都与test2中的两个1s中的每个1s连接,这产生了结果集中的3x2=6行。test1中的第一、第二和第三1之间没有什么不同,在test2中第一和第二1没有什么不同。
此外,请记住以下所有条件:
NULL = 1
NULL <> 1
NULL = NULL
NULL <> NULL都是假的。在一侧具有空值的所有条件都将计算为false。这是因为NULL表示未知值。
正如你所看到的,你所期望的是完全错误的。您似乎预期test1的第一行将与test2的第一行相结合,依此类推。在sql中没有这样的“魔力”--联接的整个逻辑都放在ON子句中,该子句与前面所述的1s连接在一起。
https://stackoverflow.com/questions/55397380
复制相似问题