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 '%手工导入%' ;


 

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐