在MySQL中模拟完全外连接的有效方法?

时间:2010-08-10 08:31:51

标签: mysql outer-join

根据Google搜索:由于MySQL不支持完全外连接,因此可以通过union和/或union all进行模拟。但是这两者都要么删除真正的副本,要么显示虚假的副本。

什么是正确有效的方式?

question似乎很有用,但无法得到答案。

1 个答案:

答案 0 :(得分:9)

您可以使用LEFT JOIN和RIGHT 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。