将一个表某字段设为另一个表某字段的值

将一个表某字段设为另一个表某字段的值

一:mysql update 将一个表某字段设为另一个表某字段的值
update center_actionlog0033 A,center_traceflownode0033 B set A.business_type=B.business_type where A.tfn_id=B.uuid;

二:Oracle中 如何用一个表的数据更新另一个表中的数据

1. 加入限制条件,对于 table1中有值,但是table2中无值的idd字段,不做修改;

  update table1 set val = (select val from table2 where table1.idd = table2.idd) where exists (select 1 from table2 where table1.idd = table2.idd);
返回多个行会报错;执行后会报错如下:ORA-01427:单行子查询返回多个行

2. 通过上述分析,简单的更新语句并不能解决遇到的异常情况。所以我们可以使用merge:
merge into table1
using table2
on (table1.idd = table2.idd)
when matched then
update set table1.val = table2.val
虽然可以解决e1情况,然而遇到e3情况时,仍然报错,如下: ORA-30926: 无法在源表中获得一组稳定的行
3. 最后,在3的基础上,加入限制条件,即可解决;
merge into table1
using (select t.idd ,max(t.val) m from table2 t group by t.idd)table2
on (table1.idd = table2.idd)
when matched then
update set table1.val = table2.m
上述写法在using后面构造了一个新的table2,但一定要对val做出处理,如果是varchar类型,可以选择 max,min等函数,如果number类型,可以使用sum,avg等函数,总之,要对val做出处理(对应多个的时候,到底要哪个?最大的还是最小的),新的table2是一个idd对应一个val。
为什么构造新的table2时要加 group by t.idd ,因为 select max(t.val) m from table2 t 查询的是一条数据,t.idd不属于这条数据的任何字段,故select t.idd后报错,拼接group by t.idd便可以查出需要的idd字段。(针对oracle数据库,mysql并不会)

参考:https://www.cnblogs.com/kangkaii/p/8419088.html

参考:Oracle中用一个表的数据更新另一个表的数据Group by 中avg();sum();min();max();count();的运用整理(Oracle的执行顺序)

猜你喜欢

转载自www.cnblogs.com/personsiglewine/p/12029373.html
今日推荐