MySql中遇到左查询无效问题

今天写sql发现使用left join 没有把左边表的数据全部查询出来,让我郁闷了一会,后来仔细研究了一会才知道自己犯了个常识性的错误(我是菜鸟)

这是原sql 

  MySql中遇到左查询无效问题

 

这样的查询并不能将tb_line这张表的数据都查询出来,好尴尬...

后面我才知道原来当我们进行多表查询,在执行到where之前,会先形成一个临时表

而on就是临时表中的条件筛选,使用left join则不管条件是否为真,都会查询出左边表的数据,条件为假的,则显示为null

MySql中遇到左查询无效问题

where则是在临时表生成之后的过滤条件,

MySql中遇到左查询无效问题

在第一张图中,我将tb_vehicle这张表的过滤条件放在where之中,那left join所产生条件为假的数据,则会在where 的 v.del_flag='0'中被过滤掉(因为条件为假的数据,del_flag都为空)

所以我看似使用了left join ,实际上这样写与使用inner join的结果是一样的

正确sql如下:

    MySql中遇到左查询无效问题

在临时表中就做好条件筛选,这样就能够得到左边表的数据

 

总结:

    使用left join  并需要做条件查询的时候,需要仔细斟酌改条件筛选放在on后面还是where后面
————————————————
版权声明:本文为CSDN博主「栗子木」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42214548/article/details/80324111