在MySQL documentation for joins中,一位同事今天向我指出了这个宝石:
RIGHT JOIN
与LEFT JOIN
类似。为了使代码可以跨数据库移植,建议您使用LEFT JOIN
而不是RIGHT JOIN
。
有人能够对此有所了解吗?这让我觉得可能是过去时代的遗留物 - 就像文档中的意思是“保持代码与早期版本的MySQL反向兼容......”
是否存在不支持RIGHT JOIN
的现代RDBMS?我认为RIGHT JOIN
是LEFT JOIN
的语法糖,任何RIGHT JOIN
都可以表示为LEFT JOIN
,但有时候如果你在那里写一个查询,可读性会受到影响方向。
这个建议仍然现代有效吗?是否有令人信服的理由避免RIGHT JOIN
?
答案 0 :(得分:27)
至少有一个SQL引擎不支持RIGHT JOIN
:SQLite。也许这就是兼容性被列为关注的原因。可能还有其他SQL引擎。
答案 1 :(得分:1)
因此,RIGHT和LEFT JOIN在典型的SQL引擎中执行相同的操作。 LEFT JOIN表a
到表b
会返回a
中存在的b
内的所有内容。 RIGHT JOIN表a
到表b
会返回b
中存在的a
内的所有内容。在优化查询之前,LEFT和RIGHT关键字仅指在哪个表上执行的操作。 MySQL优化器将始终规范化查询并使JOIN有效地成为LEFT JOIN。因此,编写查询以使用LEFT JOIN而不是RIGHT将在优化器中降低成本。
答案 2 :(得分:-1)
这是一个明智的惯例所以它应该是首选,除非你想向以后可能阅读它的人表达不同或不同寻常的东西(重要的是,包括你自己)。
您的问题是有效的,但要完成答案,则需要:
1)一个反例,其中RIGHT JOIN不运行,或者运行时存在显着差异
-OR -
2)证明没有这种情况:1存在
我认为这些很难实现。您的建议可能已被弃用,因为您的建议可能已被弃用。这也可能是由于MySQL支持多个数据库后端的一些问题。也许其中一个是正确加入不容忍的?