【发布时间】:2021-11-03 14:47:56
【问题描述】:
我正在构建生成 SQL 查询的库,并发现了我不明白为什么会发生这种情况的案例。我同意,一般来说,您应该通过“where”而不是“on”过滤掉,但 ON 允许过滤掉 LEFT join。尽管对于 RIGHT 加入,我得到的结果与 ON 请求不匹配。我想知道为什么 RIGHT join 会这样工作。
用户(表名_user):
发票(表名_invoice):
查询:
SELECT
_user.id AS userId,
_user.name AS userName,
_user.state AS userState,
_invoice.id AS invoiceId,
_invoice.userId AS invoiceUserId,
_invoice. `state` AS invoiceState
FROM
_user
RIGHT JOIN _invoice on _invoice.state = 'pending'
回复:
问题:
最好逐步执行此查询结果,以了解它是如何发生的。
【问题讨论】:
-
这就是 RIGHT JOIN 的工作方式,即使没有匹配的左侧表行,它也会从右侧表返回行。
-
所以对于 RIGHT 连接不能使用 ON 过滤掉?我已经成功地多次使用 ON 作为左连接的过滤器
-
它是对称的。 LEFT JOIN 从左侧表返回行,即使没有匹配的右侧表行。
-
是什么让你认为它应该是其他的?
-
@NicoHaase 因为 LEFT join 工作允许按 ON 条件过滤,我想知道为什么 RIGHT join 不能。我知道您应该使用 where 子句并通过用户 ID 加入,但我不知道为什么 RIGHT 加入不允许像 LEFT 那样过滤掉
标签: mysql sql right-join