left join时候 应该用on还是where
2019-07-01 本文已影响237人
良人与我
同事问 left join 时候的条件应该放到 on 后面还是 where 后面
其实这两个的执行结果是不一样的。
来个例子证明下。
建表语句和数据
create table a(f1 int, f2 int, index(f1))engine=innodb;
create table b(f1 int, f2 int)engine=innodb;
insert into a values(1,1),(2,2),(3,3),(4,4),(5,5),(6,6);
insert into b values(3,3),(4,4),(5,5),(6,6),(7,7),(8,8);
执行 查询语句 1
select * from a left join b on (a.f1=b.f1) and (a.f1=4);
结果如下:
执行 查询语句 2
select * from a left join b on(a.f1=b.f1) where a.f1=4;
结果如下:
image.png
很明显这两个语句的结果是不一样的。
on 只是拼接的条件,以主表为准 不满足条件就是null
where是最后的过滤条件