2 hao234ksdf hao234ksdf 于 2015.06.01 17:14 提问

求助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表。
图片说明
图片说明
图片说明

1个回答

danielinbiti
danielinbiti   Ds   Rxr 2015.06.01 17:34
已采纳
类似这样,没有调测,自己试试,针对是一对一,
 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


danielinbiti
danielinbiti 回复hao234ksdf: 有帮助的话到时别忘了采纳 一下就行了。
2 年多之前 回复
hao234ksdf
hao234ksdf 非常感谢为我指明思路,多谢啊,我调试下看。半年没来论坛,币都清空了,没什么能答谢的了,见谅啊
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片