多表聯合查詢后去重復數據后重新插入第一張表解決辦法


 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

 

m582445672

實現語句如下 可加個定時器 每日執行 就能解決實時均價這個難題

1 DROP TABLE IF EXISTS avg_prices;
2  
3  create table avg_prices as
4       select goods_id,goods_type,goods_name,in_buy_price,
5 ROUND(sum(in_total_price)/sum(in_amount),2) as 'junjia',count(*) from scm.in_warehouse_detail
6  group by goods_id,goods_type,goods_name
7  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表

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM