Oracel 批量更新列值

来源:互联网 发布:梁朝伟唱功 知乎 编辑:程序博客网 时间:2024/06/07 11:03

Oracel 批量更新列值

  • Oracel 批量更新列值
        • 场景当一个表模型新增字段后要关联其他表来更新该字段的值如果数据量小可以直接全量将表更新但如果数据量大应该只更新新增字段
        • 模拟将b表中b2字段的值更新到a表的a2字段中
        • 结果
        • 示例一
        • 示例二
        • 示例三

场景:当一个表模型新增字段后要关联其他表来更新该字段的值。如果数据量小可以直接全量将表更新,但如果数据量大,应该只更新新增字段。

模拟:将b表中b2字段的值更新到a表的a2字段中。

a表数据展示
b表数据展示

结果

这里写图片描述

示例一

 update a    set a2 =        (select b2 from b where a1 = b1)    where exists (select 1 from b where a1 = b1)--这一句是为了防止a中a1 != a2 的数据被更新为空!!! update a    set a.a2 =        (select b.b2 from b where b.b1 = a.a1)   where a.a1 in (select b.b1 from b)

示例二

 merge into a using (select b1, b2 from b) b ON (a.a1 = b.b1) WHEN MATCHED THEN  UPDATE SET a.a2 = b.b2

示例三

 update (select a.a1, a.a2, b.b2 new_a2           from a, b         where a.a1 = b.b1)   set a2 = new_a2

注意:
1、示例1中的exists 和 in 字句
2、示例三中如果b表的b1不是主键的话会报错请添加主键:

ORA-01779: 无法修改与非键值保存表对应的列
ALTER TABLE b ADD CONSTRAINT b_id PRIMARY KEY(b1);

0 0
原创粉丝点击