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