Oracle 中用一个表的数据更新另一个表的数据
来源:互联网 发布:刘巴 知乎 编辑:程序博客网 时间:2024/06/04 18:20
下面两个表:将表tab1中id值与和表tab2中id值相同的行的val更新为tab2中val的值.
select * from tab1;
更新完后的结果是: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中一条的情况也会出错.
最好的方法是用merge语法:
同样,如果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终极版:
select * from tab2
更新完后的结果是: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中一条的情况也会出错.
最好的方法是用merge语法:
- merge into tab1
- using tab2
- on(tab1.id=tab2.id)
- when matched then
- update set tab1.val = tab2.val
比如在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
0 0
- Oracle 中用一个表的数据更新另一个表的数据
- Oracle中用一个表的数据更新另一个表的数据
- Oracle中用一个表的数据更新另一个表的数据
- Oracle 中用一个表的数据更新另一个表的数据
- Oracle中用一个表的数据更新另一个表的数据
- Oracle中用一个表的数据更新另一个表的数据
- Oracle 中用一个表的数据更新另一个表的数据
- Oracle中用一个表更新另一个表
- Oracle中用一个表更新另一个表
- SQL一个表的数据更新到另一个表
- 用一个表的数据更新另一个表Sql Server
- MySQL里用一个表的数据更新另一个表
- 如何在一个update语句中,用一个表的数据更新另一个表的数据
- Oracle将一个表的数据插入另一个表
- Oracle查询一个表的数据插入到另一个表
- SQL Server一个表添加数据,引发另一个表更新数据 的一个简单触发器例子
- oracle中用一张表的数据更新另一张表的数据(快速稳定)
- mysql如何在一个表中插入数据的同时,更新另一个表的数据?
- Tomcat中JAVA定时器实现
- OC自动引用计数
- android实现文本复制到剪切板功能(ClipboardManager)
- 文本文件与二进制文件
- Python异常处理
- Oracle 中用一个表的数据更新另一个表的数据
- Android有用代码片段(二)
- Linux一键安装web环境全攻略(阿里云服务器)
- HTML5 基础知识(一)
- 池化技术 漫谈
- 弱校ACM奋斗史【转载】
- 黑马程序员--Java基础学习十(Java线程)
- WebKit结构简介
- C指针与字符串