我想知道多个连接的逻辑是什么(例如下面)
SELECT * FROM B
返回 100 行
SELECT B.* FROM B LEFT JOIN C ON B.ID = C.ID
返回 120 行
据我所知,如果为两个表都找到了数据,则使用左连接将从左表返回任何匹配的数据,即 B。但是为什么在使用时left join
,它返回的数据比表 B 本身还多?
我在这里做错了什么或误解了什么?非常感谢任何指导。提前致谢。
看下面的例子:
B = {1,2}
C = {(1,a),(1,b),(1,c),(1,d),(1,e)}
结果B left join C
将是:
1 | a
1 | b
1 | c
1 | d
1 | e
2 | null
结果中的行数肯定大于 B (2) 中的行数。
一般来说,结果中的行数受B left join C
限制,B.size + C.size
而不仅仅是B.size
您认为的......
设为表 B:
id
----
1
2
3
设为表 C
id name
------------
1 John
2 Mary
2 Anne
3 Stef
b 中的任何 id 与 c 中的 id 匹配,然后 id=2 将匹配两次。因此,即使基表 B 有 3 行,id 上的左连接也将返回 4 行。
现在看一个更邪恶的例子:
表 B
id
----
1
2
2
3
4
表 C
id name
------------
1 John
2 Mary
2 Anne
3 Stef
b 中的每个 id 都与 c 中的 id 匹配,然后第一个 id=2 将匹配两次,第二个 id=2 将匹配两次所以结果
select b.id, c.name
from b left join c on (b.id = c.id)
将会
id name
------------
1 John
2 Mary
2 Mary
2 Anne
2 Anne
3 Stef
4 (null)
id=4 不匹配但出现在结果中,因为它是左连接。
根据您的查询,它使用 C 和 B 表连接到 B 表是左表,因此它将显示左表的所有记录,在我们的案例中它是 B,并且在我们的案例中与其他表相关,它是 C。