7

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

什么是正确有效的方法?

这个问题似乎很相关,但无法得到答案。

4

1 回答 1

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

Wikipedia 上也有一些关于此主题的信息:完全外连接

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

于 2010-08-10T08:38:18.993 回答