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

und*_*ack 6 mysql outer-join

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

什么是正确有效的方法?

这个问题似乎很有意义,但无法得到答案.

Mar*_*ers 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
Run Code Online (Sandbox Code Playgroud)

维基百科上还有一些关于此主题的信息:全外连接.

维基百科文章建议在MySQL中使用UNION.这比UNION ALL略慢,但更重要的是它不会总是给出正确的结果 - 它将从输出中删除重复的行.所以更喜欢在这里使用UNION ALL而不是UNION.

  • 你如何扩大N表的答案?也就是说,你如何在四张桌子上模拟一个FULL OUTER JOIN呢? (2认同)