在看《MySQL 5.1参考手册》的时候,发现MySQL提供了一种两表关联update操作。原文如下:

  1. UPDATE items,month SET items.price=month.price
  2. WHERE items.id=month.id;

在MySQL中构造表验证了一下

  1. mysql> select * from test;
  2. +------+--------+
  3. | id | salary |
  4. +------+--------+
  5. | 1 | 100 |
  6. | 2 | 200 |
  7. | 3 | 300 |
  8. +------+--------+
  9. 3 rows in set (0.00 sec)
  10.  
  11. mysql> select * from test1;
  12. +------+--------+
  13. | id | salary |
  14. +------+--------+
  15. | 1 | 400 |
  16. | 2 | 500 |
  17. +------+--------+
  18. 2 rows in set (0.00 sec)
  19.  
  20. mysql> update test,test1 set test.salary=test1.salary where test.id=test1.id;
  21. Query OK, 2 rows affected (0.00 sec)
  22. Rows matched: 2 Changed: 2 Warnings: 0
  23.  
  24. mysql> select * from test;
  25. +------+--------+
  26. | id | salary |
  27. +------+--------+
  28. | 1 | 400 |
  29. | 2 | 500 |
  30. | 3 | 300 |
  31. +------+--------+
  32. 3 rows in set (0.00 sec)

不难看出,上述两表关联update中只更新了test中id为1和id为2的行。

寻思了一下,Oracle中好像并没有提供两表关联的update操作,同样输入了上述语句,Oracle报错,报错信息如下:

  1. SQL> update test,test1 set test.salary=test1.salary where test.id=test1.id;
  2. update test,test1 set test.salary=test1.salary where test.id=test1.id
  3. *
  4. 1 行出现错误:
  5. ORA-00971: 缺失 SET 关键字

后来,查了查官方文档,这种语法并不支持,那么Oracle中如何实现MySQL中的这种效果呢?

鼓捣了一下,虽然出来了,但还是略为复杂。

  1. SQL> update test set test.salary=(select salary from test1 where test1.id=test.id)
    where exists (select 1 from test1 where test1.id=test.id);
  2.  
  3. 已更新2行。
  4.  
  5. SQL> select * from test;
  6.  
  7. ID SALARY
  8. ---------- ----------
  9. 1 400
  10. 2 500
  11. 3 300

Oracle中如何实现Mysql的两表关联update操作的更多相关文章

  1. KingbaseES 两表关联Update的两种写法与性能

    熟悉oracle 的人都知道,对于两表的关联更新,其执行计划主要有 Filter 和 Outer Join 两种方式.对于大批量数据的update,Join方式明显是更优的选择.KingbaseES ...

  2. MyBatis 中两表关联查询MYSQL (14)

    MyBatis 中两表关联查询MYSQL 1.创建数据库表语句 2.插入测试数据 3.pom文件内容 <?xml version="1.0" encoding="U ...

  3. mySQL:两表更新(用一个表更新另一个表)的SQL语句

    用一个表中的字段去更新另外一个表中的字段, MySQL 中有相应的 update 语句来支持,不过这个 update 语法有些特殊.看一个例子就明白了. create table student ( ...

  4. oracle 两表关联查询

      oracle 两表关联查询 CreationTime--2018年7月4日17点27分 Author:Marydon 情景描述 查询学生表student,sname,sex,age信息及所在班级c ...

  5. oracle中查询表的信息,包括表名,字段名,字段类型,主键,外键唯一性约束信息

    来源于网上整理 总结了一下oracle中查询表的信息,包括表名,字段名,字段类型,主键,外键唯一性约束信息,索引信息查询SQL如下,希望对大家有所帮助: 1.查询出所有的用户表select * fro ...

  6. Oracle中使用游标获取指定数据表的所有字段名对应的字符串

    操作步骤:打开PLSQL Developer后,直接执行下面的语句就可以出来 --Oracle中使用游标获取指定数据表的所有字段名对应的字符串 declare mytablename VARCHAR( ...

  7. Oracle两表关联,只取B表的第一条记录

    背景:  A表.B表两表关联,关联出来的结果里B表有不止一条,需求是只要B表结果中的某一条(按某字段排序) 首先想到了直接写个带排序的子查询去匹配外围的值,从这个结果集中只要第一条,但是经过验证发现, ...

  8. ORACLE多表关联UPDATE 语句

    转载至:http://blog.itpub.net/29378313/viewspace-1064069/ 为了方便起见,建立了以下简单模型,和构造了部分测试数据:在某个业务受理子系统BSS中, SQ ...

  9. ORACLE 多表关联 UPDATE 语句

    为了方便起见,建立了以下简单模型,和构造了部分测试数据: 在某个业务受理子系统BSS中, SQL 代码 --客户资料表 create table customers ( customer_id num ...

随机推荐

  1. DAO层,Service层,Controller层、View层 的分工合作

    DAO层:DAO层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,DAO层的设计首先是设计DAO的接口,然后在Spring的配置文件中定义此接口的实现类,然后就可在模块中调用此接口 ...

  2. Java——搭建自己的RESTful API服务器(SpringBoot、Groovy)

    这又是一篇JavaWeb相关的博客,内容涉及: SpringBoot:微框架,提供快速构建服务的功能 SpringMVC:Struts的替代者 MyBatis:数据库操作库 Groovy:能与Java ...

  3. atitit 商业项目常用模块技术知识点 v3 qc29

    atitit 商业项目常用模块技术知识点 v3 qc29 条码二维码barcodebarcode 条码二维码qrcodeqrcode 条码二维码dm码生成与识别 条码二维码pdf147码 条码二维码z ...

  4. iOS-开发进阶

    iOS完整学习路线图 iOS进阶介绍: 一.iOS-常用的第三方框架的介绍 二.iOS-提高iOS开发效率的方法和工具 三.常用的调试方法 1.iOS-调试技巧 2.iOS-Xcode的使用技巧 四. ...

  5. [原创]关于mybatis中一级缓存和二级缓存的简单介绍

    关于mybatis中一级缓存和二级缓存的简单介绍 mybatis的一级缓存: MyBatis会在表示会话的SqlSession对象中建立一个简单的缓存,将每次查询到的结果结果缓存起来,当下次查询的时候 ...

  6. postman使用

    1.postman的下载:google首页左上角应用,点击后,如果没有下载postman,就在google商店搜索,点击右边按钮 2.下载后重新打开google首页,点击应用,可以看到已经下载过了,点 ...

  7. 解决“Dynamic Web Module 3.0 requires Java 1.6 or newer.”错误

    一.问题描述 1.错误截图如下. 2.设计的问题 在Eclipse中新建了一个Maven工程, 然后更改JDK版本为1.6, 结果每次使用Maven > Update project的时候JDK ...

  8. ASP.NET MVC5+EF6+EasyUI 后台管理系统(28)-系统小结

    系列目录 我们从第一节搭建框架开始直到二十七节,权限管理已经告一段落,相信很多有跟上来的园友,已经搭配完成了,并能从模块创建授权分配和开发功能了 我没有发布所有源代码,但在14节发布了最后的一次源代码 ...

  9. 使用 Ghost 写博客

    今天在https://ghost.org/上试用了一会,发现这是一个出色的博客平台,相比WordPress,更轻量级,而且是使用Node.js来做的,性能也是非常的不错. 优点 轻量级 支持主题 支持 ...

  10. jQuery的DOM操作实例(2)——拖拽效果&&拓展插件

    一.原生JavaScript编写拖拽效果 二.jQuery编写的拖拽效果 三.在jQuery中拓展一个拖拽插件