oracle多表批量更新数据

文章介绍了在Oracle数据库中使用EXISTS子句进行多表更新的方法,包括只更新特定条件记录和全量更新的示例。同时提到了在MySQL中类似的操作,通过子查询和EXISTS来更新FUND_BANK_LOG表的INNERBANK_NAME字段。这些技巧常用于数据同步和维护。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

oracle多表更新有很多办法,我自己只用exists。

只更新表1中 age 为null的数据

UPDATE t_target E

SET AGE =

(SELECT U.AGE FROM t_source U WHERE E.ID = U.ID)

WHERE EXISTS (SELECT 1

FROM t_source U

WHERE E.ID = U.ID

AND E.AGE IS NULL)

更新表1全部数据

UPDATE t_target E SET AGE = (SELECT U.AGE FROM t_source U WHERE E.ID=U.ID ) WHERE EXISTS (SELECT 1 FROM t_source U WHERE E.ID=U.ID)

更新表中多个字段数据

UPDATE SALE_SCONTRACT
 a 
SET ( A.DATA_SYSTEMDATE, A.DATA_TIMESTAMP, A.DATA_AUDIT_DATE, A.OPERATOR_CODE ) = ( SELECT t.bg_DATA_SYSTEMDATE,t.bg_DATA_TIMESTAMP,t.bg_DATA_AUDIT_DATE,t.bg_OPERATOR_CODE FROM bfzd_SALE_SCONTRACT t WHERE a.SCONTRACT_ID = t.SCONTRACT_ID ) 
WHERE     EXISTS ( SELECT 1 FROM bfzd_SALE_SCONTRACT t WHERE a.SCONTRACT_ID = t.SCONTRACT_ID );

mysql可以用以下语句进行更新

--  gx_FUND_BANK_LOG20231115
--  t.LOG_ID,t.INNERACCOUNTS_CODE,s.INNERBANK_NAME  f

SELECT * FROM FUND_BANK_LOG e
WHERE e.LOG_REMARK not like '%手工导入%'  and EXISTS (SELECT 1 FROM gx_FUND_BANK_LOG20231115 U WHERE E.LOG_ID=U.LOG_ID);

UPDATE FUND_BANK_LOG E SET e.INNERBANK_NAME = (SELECT U.INNERBANK_NAME FROM gx_FUND_BANK_LOG20231115 U WHERE E.LOG_ID=U.LOG_ID ) 
 WHERE EXISTS (SELECT 1 FROM gx_FUND_BANK_LOG20231115 U WHERE E.LOG_ID=U.LOG_ID) and e.LOG_REMARK not like '%手工导入%' ;


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值