我想知道多连接的逻辑是什么(例如下面的)
SELECT * FROM B
返回100行
SELECT B.* FROM B LEFT JOIN C ON B.ID = C.ID
返回120行
据我所知,如果找到两个表的数据,使用左连接将返回左表中的任何匹配数据,即B。但是,当使用left join
时,它返回的数据多于表B本身?
我在这里做错了什么或被误解了?任何指导都非常感谢。提前谢谢。
答案 0 :(得分:1)
请看以下示例:
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
... {/ p>
答案 1 :(得分:1)
让我们成为表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不匹配但出现在结果中,因为是左连接。
答案 2 :(得分:0)
根据你的查询,它连接到B表,C和B表是左表,所以它将显示左表的所有记录,在我们的情况下,它是B,并且与我们案例中的其他表相关,它是C.