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的值....

Oracle查询重复数据并删除,只保留一条记录

前言项目中,在“资源目录-在线编目”中,资源项子表存在多条重发数据,需要进行数据清理,删除重发的数据,最终只保留一条相同的数据。操作的表名:R_RESOURCE_DETAILS操作步骤一、重复记录根据...

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

假设表a中有多个字段(province ,city)需要从b表获取(两张表的mobile一样),总结了几种写法。   一、update a  set a.province=(select prov...

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

orcale 更新

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

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

oracle 多表关联更新,需要更新的字段在另一个表里

两表(多表)关联update -- 被修改值由另一个表运算而来 update customers a -- 使用别名 set city_name=(select b.city_name from...

Sql Server 导入另一个数据库中的表数据

在涉及到SQL Server编程或是管理时一定会用到数据的导入与导出, 导入导出的方法有多种,此处以SQL Server导入表数据为例,阐述一下:1、打开SQL Server Management S...

sqlserver 练习题目(存储过程:循环erp数据表,生成另一个表数据)

– ##表结构 ### use test_db;CREATE TABLE [dbo].[GYGDFT]( [任务单号] varchar NOT NULL, [任务序号] [int] NULL,...

分组查询统计数据 再连接字段修改另一个字段的内容(临时表temporary 和 视图view)

一个朋友提出这样的问题:表A   ID USER   1 zhangsan  2 lisi3 zhangsan4 jj5 jj6 ee表B   ID GroupName GroupUser  1 IT...

如何把大部分表中的数据迁移到另一个数据库中

需求描述:目前远程服务器有两个数据库AA和BB,两个数据库的数据库版本都为10.2.1.0.1,两个数据库中的用户不一样,但数据库中的表结构都是一样的,数据库AA表中的数据比数据库BB表中的数据多很多...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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