假設我們有test1 ,test2 兩表
create table test1(no number,name varchar2(10));
create table test2(no number,name varchar2(10));
insert into test1 values(1,'a');
insert into test1 values(2,'b');
insert into test1 values(3,'c');
insert into test2 values(1,'aa');
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
要出想要的效果,可以用下面的語句來實現.
update test1 a set name=(select name from test2 b where a.no=b.no) where
exists(select name from test2 b where a.no=b.no);
也可以用下面的語句來實現:
update (select a.name aname,b.name bname from test1 a,test2 b where
a.no=b.no) set aname=bname;
不過有個前提,是給test2表的NO設為主鍵.
alter table test2 add primary key(no);