我想知道什么是多个逻辑连接(例如下面)使用多个连接(例如,左联接)
SELECT * FROM B
返回100行
SELECT B.* FROM B LEFT JOIN C ON B.ID = C.ID
返回120行
据我所知如果两个表都找到数据,则使用左连接将返回左表中的任何匹配数据,即B。但是如何在使用left join
时返回比表B更多的数据呢?
我在这里做错了什么或被误解?任何指导都非常感激。提前致谢。
我想知道什么是多个逻辑连接(例如下面)使用多个连接(例如,左联接)
SELECT * FROM B
返回100行
SELECT B.* FROM B LEFT JOIN C ON B.ID = C.ID
返回120行
据我所知如果两个表都找到数据,则使用左连接将返回左表中的任何匹配数据,即B。但是如何在使用left join
时返回比表B更多的数据呢?
我在这里做错了什么或被误解?任何指导都非常感激。提前致谢。
让是表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 IDS匹配,则第一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是不匹配的,但因为是左连接出现的结果。
请看下面的例子:
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
结果中的行的数目是肯定比在乙行的情况下(2)。
一般在B left join C
结果行的数量由B.size + C.size
界,而不是仅由B.size
像你想的......
根据您的查询,它做与B和B表的连接表是左表,因此它将显示左表的所有记录在我们的情况下它是B和相关的其他表在我们的情况下它是C 。
我可以知道你如何格式化你的查询结果吗?谢谢 – 2013-04-09 02:29:18
你正在谈论格式化Stack Overflow上的文本?当您处于编辑模式时,您有一个按钮。其效果是用4或5个空格缩进行,结果是_code style_格式。 – 2013-04-09 05:17:13
嗨再次,所以我使用DISTINCT消除从C中检索到的重复数据,然后我的查询输出将只是从B数据的权利? – 2013-04-15 01:31:20