问题描述
- 求助mysql查询语句,实现三张表数据统计
-
temp_instore 、 temp_outstore 、 temp_stock三张表,以temp_stock表数据为主,统计与mate_id、sd_price两个字段值在另外两张表中相等的记录,主要查询出mate_id、sd_price、(sd_quantity + os_quantity - is_quantity) as quantity
就是sd_price与os_price、is_price比较,三者相等按上述进行加减运算,若os_price或is_price与sd_price不等按零处理。可能描述的不是很清楚,举个例子吧:
mate_id=1 and sd_price= 10这条记录,与另外两张表统计时。在temp_outstore表中有条记录mate_id= 1但os_price不等于sd_price,所以按0处理。在tem_instore表中有条记录mate_id=1且is_price= sd_price,所以有值参与运算。最终计算结果是20+0-3=17这该怎么设计查询语句啊,是连接查询还是怎么弄。不是太会,逻辑这块
以下插入三张表的截图:is_打头的字段是temp_instore表;os_打头的字段是temp_outstore表;sd_打头的字段是temp_stock表。
解决方案
类似这样,没有调测,自己试试,针对是一对一,
select mate_id,sd_price,sd_quantity+IFNULL(os_quantity,0)-IFNULL(is_quantity,0) quantity from temp_stock tsd left join temp_instore tin on tsd.mate_id=tin.mate_id and tsd.sd_price= tin.is_price
left join temp_outstore tos on tsd.mate_id=tos.mate_id and tsd.sd_price= tos.is_price
如果temp_instore 、 temp_outstore 、 temp_stock是一对多,
select mate_id,sd_price, sum(quantity) quantity from(
select mate_id,sd_price,sd_quantity+IFNULL(os_quantity,0)-IFNULL(is_quantity,0) quantity from temp_stock tsd left join temp_instore tin on tsd.mate_id=tin.mate_id and tsd.sd_price= tin.is_price
left join temp_outstore tos on tsd.mate_id=tos.mate_id and tsd.sd_price= tos.is_price
) group by mate_id,sd_price
时间: 2025-01-20 08:31:14