码迷,mamicode.com
首页 > 数据库 > 详细

【 DB_Oracle】Oracle多表关联更新

时间:2020-12-01 12:27:08      阅读:14      评论:0      收藏:0      [点我收藏+]

标签:博文   写法   mamicode   常见   one   blog   html   div   sts   

很多场景我们需要根据多个表的某字段进行关联更新。

  select * from table1  t1;

技术图片

  select * from table2  t2;

技术图片

  现需求:参照table2表修改table1表,修改条件为两表的fname列内容一致。

常见陷阱:

update table1 t1 set t1.fmoney = (select  t2.fmoney from table2 t2 where  t2.fname = t1.fname)

执行后table1 结果如下:

技术图片

  有一行原有值,被更新成空值了。

正确写法:

update table1 t1 set t1.fmoney = (select t2.fmoney from table2 t2 where t2.fname = t1.fname) where exists(select 1 from table2 t2 where t2.fname = t1.fname);

技术图片

SQL模板:

update table1 t1 set t1.c= (select t2.c from table2 t2 where t1.a=t2.a) WHERE EXISTS(SELECT 1 FROM table2 t2 WHERE t2.a = t1.a);

当在t1.a=t2.a的条件下t2查询出多条记录时也会报错,此时可以考虑将t2.c唯一化。

eg1:取满足条件的t2.c的最值

update table1 t1 set t1.c = (select max(t2.c) from table2  t2 where t1.a=t2.a) where exists(select 1 from table2 t2 where t2.a = t1.a);

eg2:取满足条件第一行的t2.c值

update table1 t1 set t1.c = (select t2.c  from table2  t2 where t1.a=t2.a  and rownum =1) where exists(select 1 from table2 t2 where t2.a = t1.a);

参考博文:ORACLE 两表关联更新三种方式

【 DB_Oracle】Oracle多表关联更新

标签:博文   写法   mamicode   常见   one   blog   html   div   sts   

原文地址:https://www.cnblogs.com/leiblog/p/14044218.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!