2008-08-13 72 views
8

假設我們有一個表答:雙向外部聯接

itemid mark 
1  5 
2  3 

和表B:

itemid mark 
1  3 
3  5 

我想加入對A * B = A.itemid既B.itemid左右方法。即結果:

itemid A.mark B.mark 
1  5  3 
2  3  NULL 
3  NULL 5 

有沒有辦法在MySQL的一個查詢中做到這一點?

回答

6

這就是所謂的全外連接,它不是在MySQL原生支持,從它的docs判斷。您可以使用UNION解決此限制,如鏈接到頁面的評論中所述。

由於其他人張貼片段,在這裏你去。您可以在鏈接的頁面上看到解釋。

SELECT * 
FROM A LEFT JOIN B ON A.id = B.id 
UNION ALL 
SELECT * 
FROM A RIGHT JOIN B ON A.id = B.id 
WHERE A.id IS NULL 
2

可以做一些工作,但這裏是一些SQL

select distinct T.itemid, A.mark as "A.mark", B.mark as "B.mark" 
    from (select * from A union select * from B) T 
    left join A on T.itemid = A.itemid 
    left join B on T.itemid = B.itemid; 

這依賴於左連接,它返回原來的表中的所有行(在這種情況下,這是子查詢表T)。如果連接表中沒有匹配,則將該列設置爲NULL。

-1

這對我的作品在SQL Server上:

select isnull(a.id, b.id), a.mark, b.mark 
from a 
full outer join b on b.id = a.id 
+0

問題明確指出MySQL – cdeszaq 2013-02-19 18:35:17