0
点赞
收藏
分享

微信扫一扫

update select语句为什么要加where exists()?以及用with语句进行update

慕容冲_a4b8 2022-04-21 阅读 158

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语句匹配不上的也不会进行更新
举报

相关推荐

0 条评论