Oracle从一张表中查询数据更新另一张表的数据

Oracle基础 05/13 阅读 10734 views次 人气 434
摘要:

Oracle数据库中有2张表,这2张表中的部分字段是相同的,通过相同的1个字段(字段1)做关联,更新另外一个字段(字段2),使得这2张表中的另外一个字段也对应(也就是说字段2的值也对应)。

1. 表一(test1)

新建表:

create table test1(

        name varchar2(20),

        value varchar2(20)

);

插入数据:

insert into test1(name,value) values('0001','123456');

insert into test1(name,value) values('0002','123456');

insert into test1(name,value) values('0003','123456');

insert into test1(name,value) values('0004','abcdef');

查询数据:

select * from test1;

删除表:

drop table test1;

 

2. 表二(test2)

新建表:

create table test2(

        name varchar2(20),

        value varchar2(20),

        value2 varchar2(20)

);

插入数据:

insert into test2(name,value,value2) values('0001','1','A');

insert into test2(name,value,value2) values('0002','2','A');

insert into test2(name,value,value2) values('0003','3','A');

insert into test2(name,value,value2) values('0004','4','B');

查询数据:

select * from test2;

删除表:

drop table test2;

 

3. 使用SQL语句更新

全部更细:

update test2 t2 set t2.value=(select t1.value from test1 t1 where t1.name=t2.name);

含有条件更新:

update test2 t2 set t2.value=(select t1.value from test1 t1 where t1.name=t2.name) where t2.value2='A';

update test2 t2 set t2.value=(select t1.value from test1 t1 where t1.name=t2.name) where t2.name!='0001' and t2.value2='B';

特别提醒:name值需要唯一,否则会报错,返回多列。

 

4. 使用匿名块更新

全部更细:

declare

        cursor cor is select * from test1;

begin

        for row in cor loop

                update test2 set value=row.value where name=row.name;

        end loop;

end;

评论

该文章不支持评论!

分享到: