1老规矩,上链接,自己做这个需求查到的博客
https://blog.youkuaiyun.com/liitdar/article/details/80817957 ON和where的区别
当我们使用连接操作,关联两张或多张表来返回记录时,数据库都会生成一张临时表,最后将这张临时表返回给用户。
以 LEFT JOIN 为例:在使用 LEFT JOIN 时,ON 和 WHERE 过滤条件的区别如下:
ON 条件是在生成临时表时使用的条件,它不管 ON 中的条件是否为真,都会返回左边表中的记录;
WHERE 条件是在临时表已经生成后,对临时表进行的过滤条件。因为此时已经没有 LEFT JOIN 的含义(必须返回左侧表的记录)了,所以如果 WHERE 条件不为真的记录就会被过滤掉。
//A表记录的是物资基础信息
//B表记录的是某一种物资不同批次的库存量
//需要查询的是某一种类型物资属于某部门的当前的库存量
SELECT A.code,A.name,A.specification_type,sum( case when B.mat_num = A.code then B.stock_num else 0 end )
FROM material_info A
LEFT JOIN ws_mat_stock B on A.useable =1
WHERE A.type='0' AND B.plan_office_id = "7cd1c2fd97f44c1ca533c798cf85a95b"
GROUP BY A.code,A.name,A.specification_type