【发布时间】:2017-07-06 10:31:24
【问题描述】:
我已经阅读了 SO 的一些帖子,并且我了解在 where 子句和 on 子句中过滤之间的区别。但是这些示例中的大多数都在 RIGHT 表上进行过滤(使用左连接时)。如果我有如下查询:
select * from tableA A left join tableB B on A.ID = B.ID and A.ID = 20
返回值不是我所期望的。我会认为它首先过滤左表并仅获取 ID = 20 的行,然后与 tableB 进行左连接。
当然,这在技术上应该和做的一样:
select * from tableA A left join table B on A.ID = B.ID where A.ID = 20
但我认为如果您可以在进行联接之前过滤表,性能会更好。有人可以告诉我这个 SQL 是如何处理的,并帮助我彻底理解这一点。
【问题讨论】: