Oracle中用一个表的数据更新另一个表的数据
转自:http://www.2cto.com/database/201205/130987.html 有下面两个表:将表tab1中id值与和表tab2中id值相同的行的val更新为tab2中val的值. 最容易犯的错误是: 改正为: 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 into tab1 using tab2 on(tab1.id=tab2.id) when matched then update set tab1.val = tab2.val
同样,如果tab2中有多条对应tab1中一条的情况也会出错:ORA-30926: 可以通过在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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |