2010-08-10 33 views
5

根據谷歌搜索:由於MySQL不支持完整的外部聯接,因此可以通過union和/或union all進行模擬。但是這兩者都會刪除真正的副本或顯示虛假副本。模擬MySQL中完全外連接的有效方法?

什麼是正確和有效的方式?

這個question似乎相關,但無法得到它的答案。

+2

看到這個鏈接:http://www.xaprb.com/blog/2006/05/26/how-to-write-full-outer-join-in-mysql/ – 2010-08-10 08:33:42

回答

8

您可以使用LEFT JOIN和右連接:

SELECT * FROM tableA LEFT JOIN tableB ON tableA.b_id = tableB.id 
UNION ALL 
SELECT * FROM tableA RIGHT JOIN tableB ON tableA.b_id = tableB.id 
WHERE tableA.b_id IS NULL 

還有關於此主題的維基百科上的一些信息:Full outer join

維基百科文章建議在MySQL中使用UNION。這比UNION ALL稍慢,但更重要的是,它不會總是給出正確的結果 - 它會從輸出中刪除重複的行。所以更喜歡在這裏使用UNION ALL而不是UNION。

+1

這正是@ haim evgi(通過頁面鏈接)。謝謝。 – understack 2010-08-10 08:40:15

+2

你如何針對N個表格擴展這個答案?也就是說,你將如何模擬四張桌面上的全外連接? – Gili 2011-04-08 18:38:16