【问题标题】:Efficient way to simulate full outer join in MySQL?在 MySQL 中模拟完全外连接的有效方法?
【发布时间】:2011-03-27 17:00:04
【问题描述】:

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

什么是正确有效的方法?

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

【问题讨论】:

标签: mysql outer-join


【解决方案1】:

您可以使用左连接和右连接:

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。

【讨论】:

  • 这正是@haim evgi 提到的解决方案(通过页面链接)。谢谢。
  • 你如何为 N 个表扩展这个答案?也就是说,您将如何在四个及以上的表上模拟 FULL OUTER JOIN?
猜你喜欢
  • 2013-03-11
  • 2021-10-12
  • 1970-01-01
  • 2011-12-26
  • 1970-01-01
  • 1970-01-01
  • 2012-01-08
  • 2014-04-28
  • 2014-08-08
相关资源
最近更新 更多