2010-08-10 79 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