我想知道什麼是多個邏輯連接(例如下面)使用多個連接(例如,左聯接)
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