今天在实际工作过程中,遇到数据错误问题,要求修复数据问题,使用表a的数据更新表b。
经过一番努力,解决了客户问题,思路如下:
1、获取正确的数据
gpmc_guaconquote表的pk_srcbill就是cdmc_contract表的pk_contract
先使用如下语句,将loanmny, olcloanmny的值从cdmc_contract中查出来:
select c.loanmny, c.olcloanmny
from cdmc_contract c
where g.pk_srcbill = c.pk_contract
2、使用exists语句过滤数据,要求在cdmc_contract表中,必须存在对应的数据,才对gpmc_guaconquote进行更新,避免多更新数据。
where exists(select 1 from cdmc_contract c2 where c2.pk_contract = g.pk_srcbill) ;
3、最后执行update语句,完成更新。
update gpmc_guaconquote g
set (g.amount, g.localamount) =
(select c.loanmny, c.olcloanmny
from cdmc_contract c
where g.pk_srcbill = c.pk_contract)
where exists(select 1 from cdmc_contract c2 where c2.pk_contract = g.pk_srcbill) ;