根据Google搜索:由于MySQL不支持完全外连接,因此可以通过union和/或union all进行模拟。但是这两者都要么删除真正的副本,要么显示虚假的副本。
什么是正确有效的方式?
这question似乎很有用,但无法得到答案。
答案 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。