准备工作
创建如下表数据
drop table demo_t1;
drop table demo_t2;
create table demo_t1
(
fname varchar2(20)
, fmoney varchar2(20)
);
alter table demo_t1 add primary key(fname);
insert into demo_t1 (fname,fmoney) values('a','20');
insert into demo_t1 (fname,fmoney) values('b','30');
create table demo_t2
(
fname varchar2(20)
, fmoney varchar2(20)
);
alter table demo_t2 add primary key(fname);
insert into demo_t2 (fname,fmoney) values('c','10');
insert into demo_t2 (fname,fmoney) values('d','20');
insert into demo_t2 (fname,fmoney) values('a','100');

现需求:参照t2表,修改t1表,修改条件为两表的fname列内容一致。
方式1:update
update demo_t1 t1 set t1.fmoney = (select t2.fmoney from demo_t2 t2 where t2.fname = t1.fname) where exists(select 1 from demo_t2 t2 where t2.fname = t1.fname);

如果同时更新多个字段可以参照以下语法:
update demo_t1 t1 set (字段一,字段二,...) = (select 字段一,字段二,... from demo_t2 t2 where t2.fname = t1.fname) where exists(select 1 from demo_t2 t2 where t2.fname = t1.fname);
方式2:内联视图更新
注意:需要取数据的表,该字段必是主键或者有唯一约束
update ( select t1.fmoney fmoney1,t2.fmoney fmoney2 from demo_t1 t1,demo_t2 t2 where t1.fname = t2.fname )t set fmoney1 =fmoney2;

方式3:merge更新
merge into demo_t1 t1 using (select t2.fname,t2.fmoney from demo_t2 t2) t on (t.fname = t1.fname) when matched then update set t1.fmoney = t.fmoney;

到此这篇关于oracle两表关联更新三种方式的文章就介绍到这了,更多相关oracle两表关联更新内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论