ORACLE 关联两张表批量更新数据,实用方法

CASE: 表一 新增字段 AGE, 需要从 表二中 将AGE数据同步到表一中,  或者 单纯同步两张表中的数据

表1:EMPLOYEE(被更新的表  字段  age  )

 

表2: T_USER  数据来源表 

 

方法一:   使用 exists

 

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

UPDATE EMPLOYEE E SET AGE = (SELECT U.AGE FROM T_USER U WHERE E.ID=U.ID )   WHERE EXISTS (SELECT 1 FROM T_USER U WHERE E.ID=U.ID AND E.AGE IS NULL  )

更新表1全部数据

UPDATE EMPLOYEE E SET AGE = (SELECT U.AGE FROM T_USER U WHERE E.ID=U.ID )   WHERE EXISTS (SELECT 1 FROM T_USER U WHERE E.ID=U.ID)

方法二: 与方法一类似, 使用 in

UPDATE EMPLOYEE E SET AGE = (SELECT U.AGE FROM T_USER U WHERE E.ID=U.ID )   WHERE  E.ID IN (SELECT ID FROM T_USER) AND E.AGE IS NULL

方法三: 使用 merge into

更新一个字段:

MERGE INTO EMPLOYEE E USING T_USER U ON (E.ID=U.ID ) WHEN MATCHED THEN UPDATE SET E.AGE=U.AGE WHERE E.AGE IS NULL

更新多个字段: (与方法一和方法二相比,当更新多个字段时这种方法很方便)

MERGE INTO EMPLOYEE E USING T_USER U ON (E.ID=U.ID ) WHEN MATCHED THEN UPDATE SET E.AGE=U.AGE,E.NAME=U.NAME

方法四: 快速游标

BEGIN

FOR CUR IN (

SELECT U.ID,U.NAME,U.AGE FROM T_USER U,EMPLOYEE E WHERE U.ID=E.ID

)LOOP

UPDATE EMPLOYEE E SET E.NAME= CUR.NAME,E.AGE=CUR.AGE WHERE E.ID=CUR.ID;

END LOOP;

END;

 

综上: 还是觉得 方法三 语法最方便

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值