17

joins 的 MySQL 文档中,一位同事今天向我指出了这个 gem:

RIGHT JOIN类似于LEFT JOIN. 为了保持代码跨数据库的可移植性,建议您使用LEFT JOIN而不是RIGHT JOIN.

有人能对此有所了解吗?这让我觉得这可能是过去时代的残余——也许文档中的意思是说“为了保持代码与早期版本的 MySQL 反向兼容......”

是否有不支持的现代 RDBMS RIGHT JOIN?我知道这RIGHT JOIN是语法糖LEFT JOIN,任何RIGHT JOIN都可以表示为 a LEFT JOIN,但是如果您朝那个方向编写查询,有时可读性会受到影响。

这个建议仍然现代有效吗?是否有令人信服的理由来避免RIGHT JOIN

4

3 回答 3

27

至少有一个 SQL 引擎不支持RIGHT JOINSQLite。也许这就是兼容性被列为关注点的原因。可能还有其他 SQL 引擎。

于 2012-07-11T19:08:27.873 回答
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 将在优化器中花费更少。

于 2012-07-12T21:50:28.147 回答
-1

这是一个明智的约定,因此应该首选它,除非您想向以后可能阅读它的任何人(重要的是,包括您自己)表达一些独特或与众不同的东西。

您的问题是有效的,但要完成它需要:

1) RIGHT JOIN 不运行或运行有显着差异的反例

-或者-

2)证明不存在这种情况:1

我认为这些将很难得到。您认为该建议可能已被弃用,因为它的写作是可能的。这也可能是由于 MySQL 支持多个数据库后端的一些问题。也许其中之一是 RIGHT JOIN 不宽容?

于 2012-07-11T19:03:35.523 回答