有没有理由MySQL不支持FULL OUTER JOINS?

时间:2010-07-29 11:41:21

标签: mysql sql

有没有理由MySQL不支持FULL OUTER JOINS?我已经多次在mysql中尝试了完全外连接语法并且它从未起作用,只是发现它不受mysql支持所以只是好奇为什么?

6 个答案:

答案 0 :(得分:22)

MySQL缺乏其他数据库*的许多功能。我认为他们有大量积压的想法,并没有足够的开发人员来实现它们。

2006年此功能was requested仍未实施。我猜它具有低优先级,因为你可以通过将LEFT和RIGHT OUTER JOIN与UNION ALL组合来解决它。不愉快,但它的确如此。改变这个:

SELECT *
FROM table1
FULL OUTER JOIN table2
ON table1.table2_id = table2.id

到此:

SELECT *
FROM table1
LEFT JOIN table2
ON table1.table2_id = table2.id
UNION ALL
SELECT *
FROM table1
RIGHT JOIN table2
ON table1.table2_id = table2.id
WHERE table1.table2_id IS NULL

*为了公平对待MySQL,它们还具有许多其他数据库所没有的功能。

答案 1 :(得分:4)

我不相信MySQL开发人员曾经说过为什么它可能难以实现的任何技术原因。

但是,与大多数DBMS一样,MySQL有很多地方没有完全实现ANSI标准。由于FULL OUTER JOIN是一个很少使用的功能,通常可以用UNION解决方法替换,因此修复它的压力很小。

我建议您将语音添加到bug 18003

答案 2 :(得分:2)

因为它从未被MySQL开发人员实现过。 为什么? 因为客户没有足够的压力。

答案 3 :(得分:1)

在一个大型系统中,我通常可能会使用一次或两次FULL OUTER JOIN,所以对它没有太大的需求,当然你可以相当容易地解决它并且可能更明确地可读(如果你正在推断基于左/右结果的派生列,其中UNION为LEFT和RIGHT JOIN。

答案 4 :(得分:0)

随着产品的成熟,每个版本都会添加更多功能。只是粉笔这个尚未实施。我确信它最终会存在,并不意味着MySql是坏的或任何东西,每个数据库都有额外的功能和缺少的功能。我希望SQL Server具有MySql具有的组连接功能!

答案 5 :(得分:0)

从高性能MySQL:

目前,MySQL的联接执行策略很简单:它将每个联接都视为嵌套循环联接。一旦找到没有匹配行的表,就无法使用嵌套循环和回溯执行FULL OUTER JOIN,因为它可能以没有匹配行的表开始。这解释了为什么MySQL不支持FULL OUTER JOIN