同事問 left join 時候的條件應(yīng)該放到 on 后面還是 where 后面
其實這兩個的執(zhí)行結(jié)果是不一樣的务唐。
來個例子證明下颁虐。
建表語句和數(shù)據(jù)
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);
執(zhí)行 查詢語句 1
select * from a left join b on (a.f1=b.f1) and (a.f1=4);
結(jié)果如下:
執(zhí)行 查詢語句 2
select * from a left join b on(a.f1=b.f1) where a.f1=4;
結(jié)果如下:
很明顯這兩個語句的結(jié)果是不一樣的随闺。
on 只是拼接的條件虾标,以主表為準 不滿足條件就是null
where是最后的過濾條件