2019独角兽企业重金招聘Python工程师标准>>>
left join 和 inner join
首先 MySQL 中 inner join 的效率确实要高于 left join。所以没必要使用 left join 转弯成 inner join 的效果。这样不但效率降低,可读性也会降低。
Number1
select
from t1 left join t2
where t2.field = value
Number2
select
from t1 left join t2 and t2.field = value
这两种写法涉及到一个条件位置不同查询结果就不一致的问题,Number1的意思其实和使用 inner join 效果是一致的,因为他对连接的结果做了过滤;
Number2 则是先对 t2 做过滤,然后再连接,所以他的结果集要大于 Number1,换句话说Number2的条件是强加在 t2 上的,而不是整个结果集。
另外,如果把查询条件改为 t2.field is null ; 前者与后者的结果是一致的,都是表示存在 t1 不存在 t2,所以这个比较特殊。
总之尽量不要使用 left join,除非业务需要,否则尽量使用 inner join.