工作中有个需求,现在新表中有一些数据跟老表的基本一样,这样只需要把老表中数据搬到新表中就可以了,同时把不同的字段修改下数据即可,在修改字段时发现,需要指定一个条件,比如主键id,来修改某条记录,这样一条一条修改效率太低了,有没有批量操作的方式呢?

SQL>select *from wwn2;

TOWN ID-------------------- ----------

222 222

111 111ww‘jj 111

llll 1111dddd2222lllldf111lllldf111dsafdf111

3435 111ljjjjj222dsafdf111

3435 111ljjjjj222SQL> select *from wwm5;

TOWN ID-------------------- ----------lllldf111test9984SQL> select wwm2.* from wwm2,wwm5 where wwm2.id=wwm5.id

TOWN ID-------------------- ----------

111 111ww‘jj 111

lllldf 111lllldf111dsafdf111

3435 111dsafdf111

3435 111

8rows selected.--需要更新8条数据是正确的

下面是一个错误的做法:

SQL> update wwm2 set wwm2.town=(select wwm5.town from wwm5 where wwm5.id=wwm2.id)13rows updated.

SQL> select *from wwm2;

TOWN ID-------------------- ----------

222lllldf111lllldf111

1111

2222lllldf111lllldf111lllldf111lllldf111

222lllldf111lllldf111

222

13rows selected.--可以看到13条记录被更新,符合条件的更新正确,不符合条件的也更新为NULL.以下是正确的方法

解决方法:

方法一:

SQL>update wwm22 set town=(select town from wwm5 where wwm5.id=wwm2.id)3 where id=(select wwm5.id from wwm5 where wwm5.id=wwm2.id)

方法二:

SQL>update wwm2

set town=(select town from wwm5 where wwm5.id=wwm2.id)

where exists (select1 from wwm5 where wwm5.id=wwm2.id)

方法三:1declare2cursor cur_wwm is select town,id from wwm5;3begin4 formy_wwm in cur_wwm loop5 update wwm2 set town=my_wwm.town6 where id=my_wwm.id;7end loop;8end;

说明:如果select 子句可以返回多行记录,但返回适合where条件的记录只能是唯一的,否则将会报返回单行的select子句返回多行的错误,因为update只能跟据此处的where子句(内层where)进行相应记录的匹配更新,一次只能是一条。

实际使用的sql为:

update table1 s set s.yesterday = (select yesterday from table1_BACK sb where sb.tagname = s.tagname and rownum = 1) where s.tagname = (select tagname from table1_BACK sb where sb.tagname = s.tagname);

update table1 s set s.yesterday = (select yesterday from table1_BACK sb where sb.tagname = s.tagname and rownum = 1) where exists (select 1 from table1_BACK sb where sb.tagname = s.tagname);

写博客是为了记住自己容易忘记的东西,另外也是对自己工作的总结,文章可以转载,无需版权。希望尽自己的努力,做到更好,大家一起努力进步!

如果有什么问题,欢迎大家一起探讨,代码如有问题,欢迎各位大神指正!

oracle update set select,oracle update set select from 关联更新相关推荐

  1. mysql之关联更新(update join,用b表更新a表记录)

    前言 发现之前并没有整理过mysql表关联更新,这里补上.有时候我们需要用b表去更新a表的记录,如果只有一个字段那通常我们可能就update set a.xxx=(select b.xxx from ...

  2. Oracle使用游标更新数据 Oracle游标之select for update和where current of 语句

    Oracle使用游标更新数据 2016年11月20日 13:15:49 hzwy23 阅读数:5313 友情推广 ###使用游标修改数据 ####定义一个游标,游标名称为 mycursor ##### ...

  3. Oracle数据库之oracle update set select from 关联更新

    本文主要向大家介绍了Oracle数据库之oracle update set select from 关联更新,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助. 工作中有个需求,现在 ...

  4. Oracle\MS SQL Server的数据库多表关联更新UPDATE与多表更新

    一条Update更新语句是不能更新多张表的,除非使用触发器隐含更新.而表的更新操作中,在很多情况下需要在表达式中引用要更新的表以外的数据.我们先来讨论根据其他表数据更新你要更新的表 一.MS    S ...

  5. Select For update语句浅析

    Select -forupdate语句是我们经常使用手工加锁语句.通常情况下,select语句是不会对数据加锁,妨碍影响其他的DML和DDL操作.同时,在多版本一致读机制的支持下,select语句也不 ...

  6. postgresql select for update 多行加锁顺序_PostgreSQL和Mysql的MVCC实现机制的差异对比

    任何数据库的主要要求之一就是实现可伸缩性.只有将争用(锁定)最小化(如果不能一起删除),才可以实现.由于读/写/更新/删除是数据库中发生的一些主要的频繁操作,因此对于这些操作并发进行而不被阻塞非常重要 ...

  7. mysql update nowait_mysql innodb之select for update nowait

    作者: 弦乐之花 | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明 mysql innodb之select for update nowait 习惯了oracle数据库的sele ...

  8. mysql事务模式怎么查_Mysql InnoDB中的查询事务模式与锁定select ..for update

    在 InnoDB 的行锁中使用所谓的 next-key locking.这就意味着,除了索引记录外,InnoDB 还可以锁定该索引记录前部"间隙" ('gap') 以阻塞其它用户在 ...

  9. 数据库中Select For update语句的解析

    ----------- Oracle -----------------– Oracle 的for update行锁 键字: oracle 的for update行锁 SELECT-FOR UPDAT ...

最新文章

  1. hdu1160FatMouse's Speed(DP)
  2. 【Qt】qss样式表之:自定义属性实现动态切换样式
  3. 25个Pandas最实用技巧
  4. 【2017上半年中国AI融资英雄榜】TOP10融资50亿元,二八定律明显
  5. [系统安全] 九.Windows漏洞利用之MS08-067远程代码执行漏洞复现及深度防御
  6. 随手看的一本书《java微服务》,测试成功了其中的第一个样例
  7. Centos7更新 SQLite3至版本3.29.0
  8. php psot传值_三种方法教你如何用PHP模拟post提交数据
  9. github出现Your account has been flagged.导致账号无法公开的解决办法
  10. java mybatis 搭建_mybatis环境搭建(转载)
  11. springmvc重定向到另一个项目_springmvc怎么重定向,从一个controller跳到另外一个controller...
  12. php常见web安全问题,web安全面试常见问题(来自微博)
  13. 蓝桥杯2017年第八届C/C++省赛B组第一题-购物单
  14. CF 1538 G. Gift Set (贪心+思维)
  15. 系统安全 - windowns系统镜像下载
  16. [MacBook Pro] 错误提示zsh_ command not found_ brew
  17. html中怎样变单独英文月份,【Web前端问题】js中,如何将日期中的月份转化为英文显示?...
  18. MySQL-基本概念与查询操作(DESC/SELECT/FROM/WHERE/LIKE)
  19. Android屏幕截图实现
  20. TikTok涨粉?参考抖音?账号增粉解析!

热门文章

  1. cura开发调试环境的安装
  2. 交换ubuntu中 capslock和esc按键
  3. oppo android多大内存,OPPO R9s Plus的内存容量是多少?运存是多少?
  4. 基于python的pygame实现造梦西游天宫道的笔记(三)
  5. 【面经】中邮消费金融大数据开发面经
  6. 2019苏州计算机一级考试时间,2019年3月苏州科技大学计算机等级考试3月9日-10日...
  7. python-课后作业-3
  8. 【 I.MX6U-ALPHA 】嵌入式Linux Ubuntu系统入门系列(二)Ubuntu 系统入门
  9. Spring学习笔记-Bean初始化销毁
  10. 75 朴淳 行朝諸臣交爭請殺而姑不許