2008-08-13 46 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