eg:
--以pg库为例,oracle也一样,只是数据类型稍有不同
create table test(id numeric,name character(100));
create table test1(id numeric,name character(100));
insert into test(1,'li');
insert into test(2,'shi');
insert into test(3,'ming');
insert into test1(1,'zhu');
insert into test1(2,'yuan');
insert into test1(4,'zhang');
1、使用update不加where exist()更新
update test
set name = (select name from test1 t where test.id = t.id);
//可以看到test表的3条都被更新了,匹配上的id1,2是正常的,3被更新为空
//因此不加exists()匹配不上的会被更新为空
2、加where exists()
update test
set name = (select name from test1 t where test.id = t.id)
where exists (select 1 from test1 t1 where test.id = t1.id)
//这样写确保匹配不到的不进行更新
3、使用with语句
with t as (
select id,name from test1)
update test
set name = t.name
from t
where test.id = t.id;
//使用with语句匹配不上的也不会进行更新