我有两个表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
您能帮助我理解所有联接上的内容吗?
答案 0 :(得分:1)
test1
中三个1的每个与test2
中两个1的每个连接,这产生了您在结果集中得到的3x2 = 6行。 test1
中的第一个,第二个和第三个1之间没有什么不同,test2
中的第一个和第二个1之间没有什么不同。
此外,请记住以下所有条件:
NULL = 1
NULL <> 1
NULL = NULL
NULL <> NULL
是错误的。一侧为NULL的 All 条件将评估为false。这是因为NULL代表未知值。
如您所见,您所期望的完全错误。看来您希望test1
的第一行与test2
的第一行连接在一起,依此类推。 sql中没有这样的“魔术”-连接的整个逻辑都放在ON
子句中,该子句按前面的解释连接了1。