Oracle中用一个表的数据更新另一个表的数据

转载 2016年08月31日 10:09:00

ocacle中用一个表的数据更新另一个表的数据 有下面两个表:将表tab1中id值与和表tab2中id值相同的行的val更新为tab2中val的值.

select * from tab1; 


select * from tab2


最容易犯的错误是:update tab1 set val=(select val from tab2 where tab1.id=tab2.id);

更新完后的结果是:select * from tab1,在tab1中有的行,如果在tab2中没有对应的行,

值被更新为null


改正为:

update tab1 set val=(select val from tab2 where tab1.id=tab2.id)where exists (select 1 from tab2 where tab1.id=tab2.id);

但是如果tab2中有多条对应tab1中一条的情况也会出错.

如果select出的数据为上万条,效率很低,用下面方法

最好的方法是用merge语法:

merge into tab1  using tab2  on(tab1.id=tab2.id)  when matched then  update set tab1.val = tab2.val

同样,如果tab2中有多条对应tab1中一条的情况也会出错:ORA-30926:unable to get a stable set of rows in the source tables 

比如在tab2中再插入一条

insert into tab2 values(2,'xxxx')

可以通过在using中的subquery中将重复记录过滤来避免这种错误.

merge终极版:

merge into tab1  using  (select * from tab2 x  where x.rowid =  (select max(y.rowid) from tab2 y  where x.id = y.id)) tab2  on(tab1.id=tab2.id)  when

matched then  update set tab1.val = tab2.val 

转自:http://www.2cto.com/database/201205/130987.html

Oracle中用一个表的数据更新另一个表的数据

转自:http://www.2cto.com/database/201205/130987.html有下面两个表:将表tab1中id值与和表tab2中id值相同的行的val更新为tab2中val的值....
  • aiynmimi
  • aiynmimi
  • 2017年01月03日 13:49
  • 9957

Oracle 将一张表的数据更新到另一张表

需求 有表成绩T1,记录学生成绩,表T2是一张加分的表,现在用表T2给少数名族学生加分。 表成绩表T1 PID SCORE ISMINORITY ---- ---------- ----...
  • u012557814
  • u012557814
  • 2017年01月19日 12:05
  • 1747

oracle把一个表的数据复制到另一个表中

1. 新增一个表,通过另一个表的结构和数据   create table XTHAME.tab1 as select * from DSKNOW.COMBDVERSION   2. 如果表...
  • my_name_nb
  • my_name_nb
  • 2017年03月20日 16:38
  • 3598

在Oracle数据库里,用一个表去更新另一个表的方法

在Oracle里,有时需要用一个表去更新另一个表。下面是实现的例子:1.创建一个表test_acreate table test_a(id number(19),name varchar2(20),a...
  • clovejava
  • clovejava
  • 2008年10月29日 17:00
  • 7312

oracle数据库:update更新多表总结

总体原则:1)更新的时候一定要加where条件,否则必然引起该字段的所有记录更新                    2)跨表更新时,set和where时,尽量减少扫描次数,从而提高优化 ...
  • funnyfu0101
  • funnyfu0101
  • 2016年10月09日 18:16
  • 3681

Oracle怎样将一张表的多个字段更新到另一张表中去

update t_retired_device a  set(a.tag_id, a.sub_tag_id) =  (select b.tag_id,b.sub_tag_id from t_test ...
  • xp_lx1
  • xp_lx1
  • 2017年06月08日 14:28
  • 508

Oracle多表关联更新(update多表关联)

转自:http://blog.163.com/gaofx_hk/blog/static/193999289201172893813254/ .Oracle没有update from语法,可以通过两种...
  • Leeboy_Wang
  • Leeboy_Wang
  • 2012年10月22日 18:16
  • 42367

Oracle SQL:update更新语句总结

Oracle update SQL 语句总结: update 用于修改表中的数据
  • yihuiworld
  • yihuiworld
  • 2015年03月28日 11:21
  • 30798

Oracle 中用一个表的数据更新另一个表的数据

有下面两个表:将表tab1中id值与和表tab2中id值相同的行的val更新为tab2中val的值. select * from tab1; select * from tab2 ...
  • kkdelta
  • kkdelta
  • 2012年05月04日 15:49
  • 10130

怎样将Oracle一张表的多个字段更新到另一张表中去

假设表a中有多个字段(province ,city)需要从b表获取(两张表的mobile一样),总结了几种写法。   一、update a  set a.province=(select prov...
  • luck901229
  • luck901229
  • 2012年12月29日 20:22
  • 22296
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Oracle中用一个表的数据更新另一个表的数据
举报原因:
原因补充:

(最多只允许输入30个字)