【发布时间】:2020-08-18 17:34:56
【问题描述】:
我有两张表,只有一列。
p1 (id - 1,1,null)
p2(id - 1,1,null, null)
当我在做左连接时
(select * from p1 left join p2 on p1.id = p2.id)
我得到 5 行
(1,1,1,1.null)
我希望得到 4 行。 请解释原因。
【问题讨论】:
-
我认为你不明白为什么你会得到 1 的 4 行。您获得的第 5 行是表
p1中带有null的行。在左连接中,返回左表的所有行。 -
左连接会先返回你左表的所有行,也就是3,然后是右表的所有匹配行,对于'1'的每一行,你会找到2个匹配的行正确的表,所以总共5(2行匹配第一个'1',2行匹配第2个'1',最后1个不匹配NULL)
-
sqlfiddle.com/#!9/33e6845/8 基本上,你不能加入NULL
-
你也得到了一个 cross join - p1 中值为 1 的每一行都匹配 p2 中的 2 行。使用更好的样本数据会更容易理解这一点。
-
你认为你会得到哪 四 行?查看
join两侧的两个 列。你没有得到什么?