多表联合查询后去重复数据后重新插入第一张表解决办法
2016-04-15 16:44
267 查看
select goods_id,goods_type,goods_name,in_buy_price,ROUND(sum(in_total_price)/sum(in_amount),2),count(*) from in_warehouse_detail group by goods_id,goods_type,goods_name order by goods_id,goods_type,goods_name
查询结果如下:
另一张关联表【通过goods表的goods_Id和in_warehouse_detail表的goods_id关联】
select goods_Id,goods_name,goods_sel_price,goods_buy_price from goods
希望实现效果
①根据主外键关联将in_warehouse_detail查询到的平均值【ROUND(sum(in_total_price)/sum(in_amount),2)】列数据更新到goods表的goods_buy_price 列
②查询in_warehouse_detail表in_buy_price 和 ROUND(avg(in_buy_price),2)这两列不同值 的数据
③查询goods表goods_sel_price 列和in_warehouse_detail表 ROUND(avg(in_buy_price),2)这两列不同值 的数据
后来自己琢磨出来点东西 觉得得使用临时表来处理 查询当前要做的事情后整合发现
select goods_Id,goods_name,goods_sel_price,goods_buy_price from goods
select g.goods_Id,g.goods_name,g.goods_type,g.goods_sel_price,g.goods_buy_price ,a.junjia from goods g,avg_prices a where g.goods_Id = a.goods_id and g.goods_sel_price != a.junjia
将上面的查询结果塞入临时表
DROP TABLE IF EXISTS avg_prices; create table avg_prices as select goods_id,goods_type,goods_name,in_buy_price, ROUND(sum(in_total_price)/sum(in_amount),2) as 'junjia',count(*) from scm.in_warehouse_detail group by goods_id,goods_type,goods_name order by goods_id,goods_type,goods_name;
查询生成的临时表里的数据
select * from avg_prices
那么解决的问题就变成了 如何 将第一张表里junjia字段根据id 条件批量更新到第二张表goods表内goods_buy_price字段值
通过个人不断测试终于实现
多亏 沉沦启发我语句
update a.junjia from goods g,avg_prices a set g.goods_sel_price = a.junji where g.goods_Id = a.goods_id
实现语句如下 可加个定时器 每日执行 就能解决实时均价这个难题
DROP TABLE IF EXISTS avg_prices; create table avg_prices as select goods_id,goods_type,goods_name,in_buy_price, ROUND(sum(in_total_price)/sum(in_amount),2) as 'junjia',count(*) from scm.in_warehouse_detail group by goods_id,goods_type,goods_name order by goods_id,goods_type,goods_name;
源码
---------如果当前数据库里面存在 均价临时表 则删除掉--------- DROP TABLE IF EXISTS avg_prices; ---------创建均价临时表并将查询结果填充入临时表--------- create table avg_prices as select goods_id,goods_type,goods_name,in_buy_price, ROUND(sum(in_total_price)/sum(in_amount),2) as 'junjia',count(*) from scm.in_warehouse_detail group by goods_id,goods_type,goods_name order by goods_id,goods_type,goods_name; ---------根据ID为关联 批量更新goods表 update avg_prices a,goods g set g.goods_buy_price = a.junjia where g.goods_Id = a.goods_id and g.goods_sel_price != a.junjia ;
库存也可这样尝试 批量更新goods表
相关文章推荐
- 运行caffe时报错:Check failed: error == cudaSuccess
- 4.14腾讯实习一面记录(移动客户端方向)
- java中序列化和反序列化
- okHttp
- HDU1028(DP)
- android studio设置注释模板
- QLabel html颜色
- Oracle Job 语法和时间间隔的设定
- Docker 清理命令集锦
- 100个数的和
- Docker 清理命令集锦
- PHP合并两张图片(水印)
- ffmpeg转MP4 moov头在前命令
- const T、const T*、T *const、const T&、const T*& 的区别
- Android系统服务接口
- ZOJ 1049
- 做技术的大家可以看一下这些网站,
- 基本数据类型的常量池与String类型常量池解析
- 三和韓長庚 著 正易 對讀 241-276
- 六种方式实现hibernate查询