Oracle中如何通过关联表一次性批量更新多条数据的字段值
Oracle批量更新表2Value字段解决方案
方案1:使用MERGE语句(推荐)
Oracle中跨表关联更新场景优先推荐MERGE语句,语法简洁且可以避免无匹配数据时字段被误更新为NULL的问题,写法如下:
MERGE INTO table2 t2 USING table1 t1 ON (t2.project = t1."Project type") WHEN MATCHED THEN UPDATE SET t2.value = DECODE(t2.quarter, '1', t1.Quarter1, '2', t1.Quarter2, '3', t1.Quarter3, '4', t1.Quarter4);
逻辑说明:
- 以
table2的project字段和table1的Project type字段作为关联匹配条件 - 匹配成功后,根据
table2的quarter值,对应取table1的对应季度字段赋值给value
方案2:使用UPDATE关联子查询写法
如果更习惯UPDATE语法,也可以使用如下写法:
UPDATE table2 a SET a.value = ( SELECT DECODE(a.quarter, '1', t1.Quarter1, '2', t1.Quarter2, '3', t1.Quarter3, '4', t1.Quarter4) FROM table1 t1 WHERE t1."Project type" = a.project ) WHERE EXISTS ( SELECT 1 FROM table1 t1 WHERE t1."Project type" = a.project );
注意事项:
- 需确保
table1中Project type值唯一,否则子查询返回多行会触发执行报错 - 末尾的
EXISTS条件是为了避免table2中存在table1没有的项目类型时,value被误更新为NULL
内容的提问来源于stack exchange,提问作者Qiteng Feng
相关产品推荐
相关产品推荐

