ORACLE中的多表关联更新

时间:2022-05-22 14:57:23
假设我们有test1 ,test2 两表

ORACLE中的多表关联更新create   table  test1(no  number ,name  varchar2 ( 10 ));
ORACLE中的多表关联更新
create   table  test2(no  number ,name  varchar2 ( 10 ));
ORACLE中的多表关联更新
insert   into  test1  values ( 1 , ' a ' );
ORACLE中的多表关联更新
insert   into  test1  values ( 2 , ' b ' );
ORACLE中的多表关联更新
insert   into  test1  values ( 3 , ' c ' );
ORACLE中的多表关联更新
insert   into  test2  values ( 1 , ' aa ' );
ORACLE中的多表关联更新
insert   into  test2  values ( 2 , ' bb ' );


至此:
test1
        NO NAME
---------- ----------
         1 a
         2 b
         3 c

test2
        NO NAME
---------- ----------
         1 aa
         2 bb

如果要将test1表与test2表NO字段相等的记录的name字段更新为与test2表中的name字
段的值.
即以下效果:
test1
        NO NAME
---------- ----------
         1 aa
         2 bb
         3 c

那么以下的语句
update test1 a set name=(select name from test2 b where a.no=b.no);
的效果为:
test1
        NO NAME
---------- ----------
         1 aa
         2 bb
         3

要出想要的效果,可以用下面的语句来实现.
ORACLE中的多表关联更新update  test1 a  set  name = ( select  name  from  test2 b  where  a.no = b.no)  where
ORACLE中的多表关联更新
exists ( select  name  from  test2 b  where  a.no = b.no);
ORACLE中的多表关联更新

也可以用下面的语句来实现:
ORACLE中的多表关联更新update  ( select  a.name aname,b.name bname  from  test1 a,test2 b  where
ORACLE中的多表关联更新a.no
= b.no)  set  aname = bname;
ORACLE中的多表关联更新
不过有个前提,是给test2表的NO设为主键.
alter table test2 add primary key(no);