在开发中遇到了一个问题,有货物不一定有产品,但是一旦用货物ID关联到产品输出的一定是带有产品的货物而非没有产品的货物一并输出,基于对数据库了解的浅薄,很多语句都是草草看过,不以为然,如今真是真枪实干却无从查起,询问学姐,学姐给出了他的解决方法,十分繁琐,先进行一次遍历查询所有货物,再进行第二次循环遍历去选出有产品的。

恰好同学做过类似功能他说SQL有个left join on的命令可以满足这个,便立即百度起来.

select a.,b.
from table1 a
left join table2 b on b.X=a.X

LEFT JOIN 关键字会从左表 (a) 那里返回所有的行,即使在右表 (b) 中没有匹配的行。

那么还有一个问题,在项目中有一个flag作为删除的状态码,需要显示未删除的产品,以及未删除的货物,那么如何放置这两个条件?

那么条件写在on 后面还是写在where后面呢,首先了解一下放在on和where两个后面的区别,数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户;where条件是在临时表生成好后,再对临时表进行过滤的条件;因此:where 条件加上,已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。相当于在进行left join过滤之后的数据在进行where的一次过滤,就会把部分由于右表为null的属性排除开外,导致查询不准确。

参考:https://www.cnblogs.com/huahua035/p/5718469.html