【第22期】观点:IT 行业加班,到底有没有价值?

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 中用一个表的数据更新另一个表的数据

有下面两个表:将表tab1中id值与和表tab2中id值相同的行的val更新为tab2中val的值. select * from tab1; select * from tab2 ...

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

转自:http://www.2cto.com/database/201205/130987.html有下面两个表:将表tab1中id值与和表tab2中id值相同的行的val更新为tab2中val的值....

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

SQL两表之间:根据一个表的字段更新另一个表的字段

1. 写法轻松,更新效率高: update table1 set field1=table2.field1, field2=table2.field2 from table2 where ...

Oracle根据一个表更新另一个表的几种写法

1. declarecursor t1 is select * from tablename;beginfor rec in t1 loopupdate tablename t set t.detai...
  • bobwu
  • bobwu
  • 2009-01-13 15:52
  • 6360

Oracle用一个表的列更新另一个表对应记录的列,一不小心有字段就更新为空了

orcale 更新

SQL Server 中如何用一个表的数据更新另一个表中的数据

原帖地址:http://www.cnblogs.com/emanlee/archive/2009/07/24/1530455.html for ACCESS 数据库: update a, b ...
  • broze
  • broze
  • 2014-12-25 14:47
  • 9499

SQL从一个表查询数据插入/更新到另一个表

在应用中我们可能会遇到一些数据导入操作,如从一个表查询出数据插入到另外一个表,或从一个表查询出数据更新到另外一个表,这些操作一般都是一次性操作,针对一次性操作,效率只是第二位,第一位的是功能实现。这个...

SQL一个表的数据更新到另一个表

Oracle: update ( select  a.xingming yy ,b.keshiid  xx from z_dangan a,z_dangan_mx b where  a.da...

Oracle用一个表的列更新另一个表对应记录的列

之前在项目中导入基础数据时,因为代码写的不够完善,导致一些列的数据没有正确导入,在系统中重新导入所有基础数据又太麻烦,所以想到把没导入数据库的列单独放入EXCEL中,通过PL\SQL导入到数据库中,并...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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