需求

有一个部门的表(dept),

  • 部门编号(deptno)
  • 部门员工数(emps)
  • 部门员工的总工资(income)

还有一个员工表(emp)

  • 员工编号(empid)
  • 所属部门(deptno)
  • 工资(sal)

要求更新部门员工数和总工资数。

代码

1.

update deptset(emps,income)=(select count(empid),sum(sal)from empwhere emp.deptno=dept.deptno);

一般都会满足。这样整个表都会更新。

假设有这样一个情况,公司有一个极其神秘的部门‘’混分小分队‘’,部门人数和部门收入都有值。但为了保护员工信息,员工表里面就没有该部门 的任何信息。
那上述查询后,这个部门的值会被置为空。

2.

那如何搞呢?
利用另外一张表更新本表:(表1中有值,但表2中没有值,则不做修改)

update 表1 set 列名=(select 列名 from 表2 where 表1.列名=表2.列名) where exists (select 1 from 表2 where 表1.列名=表2.列名)

按葫芦画瓢:

update deptset(emps,income)=(select count(empid),sum(sal)from empwhere emp.deptno=dept.deptno)where exists (select 1 from emp where emp.deptno=dept.deptno)

这种情况就能解决。它只更新员工的部门编号部门的部门编号相对应的情况,不一致的情况就不更新,比如‘’混分小分队‘’部门就没有更新。


  • select 1 from 表名select * from 表名 作用上来说是没有差别的,都是查看是否有记录。但前者效率更高
  • 用exists代替in可以提高sql语句的执行效率

那么,代码select 1 from emp where emp.deptno=dept.deptno的意思是:
在emp表中,找出emp.deptno=dept.deptno的行,作为查询结果,然后select 1 ,即把这些具体的值变为1.
查询结果的行数没有变,只有一列的值,都是1.
所以select 1 不涉及到具体的数值就可以查看是否有记录,效率更高一些。


参考:https://www.cnblogs.com/kangkaii/p/8419088.html

Oracle update 多表关联更新相关推荐

  1. 22、UPDATE多表关联更新

    MySQL 可以基于多表查询更新数据.对于多表的 UPDATE 操作需要慎重,建议在更新前,先使用 SELECT 语句查询验证更新的数据与自己期望的是否一致. 下面我们建两张表,一张表为 produc ...

  2. mysql 关联更新_MySQL UPDATE多表关联更新

    MySQL 可以基于多表查询更新数据.对于多表的 UPDATE 操作需要慎重,建议在更新前,先使用 SELECT 语句查询验证更新的数据与自己期望的是否一致. 下面我们建两张表,一张表为 produc ...

  3. mysql update 多表更新_MySQL UPDATE多表关联更新

    MySQL 可以基于多表查询更新数据.对于多表的 UPDATE 操作需要慎重,建议在更新前,先使用 SELECT 语句查询验证更新的数据与自己期望的是否一致. 下面我们建两张表,一张表为 produc ...

  4. MySQL UPDATE多表关联更新

    MySQL 可以基于多表查询更新数据.对于多表的 UPDATE 操作需要慎重,建议在更新前,先使用 SELECT 语句查询验证更新的数据与自己期望的是否一致. 下面我们建两张表,一张表为 produc ...

  5. Oracle中多表联合更新处理方法详解

    ORACLE中多表关联更新与SQL Server和MYSQL的语法稍有不同,现将ORACLE中多表关联更新的几种方法处理如下: 一.创建测试表和添加测试数据 CREATE TABLE t_test01 ...

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

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

  7. Oracle多表关联更新

    这里写目录标题 Oracle多表关联更新 一.最简单的形式-单表更新 二.两表(多表)关联update -- set为简单的数据(直接是值),且仅在where字句中的连接 三.两表(多表)关联upda ...

  8. 表的插入、更新、删除、合并操作_14_ 通过表关联更新多个表多个字段

    通过表关联更新多个表多个字段 需求描述 需求:更新emp表里的sal字段的值为temp表里的sal乘以1.5,同时更新temp表里ename为emp表里的值,匹配条件是两个表的deptno. 解决方法 ...

  9. 表的插入、更新、删除、合并操作_13_通过表关联更新多个字段

    通过表关联更新多个字段 需求描述 需求:更新emp表里的sal字段的值为temp表里的sal乘以1.5,同时更新ename为temp表里的值, 匹配条件是两个表的deptno.. 解决方法:这里通过U ...

最新文章

  1. 金融行业数据管理将何去何从?
  2. 从0 到1 又如何?他逆袭成边缘云计算的贡献者
  3. 用Javascript模拟微信飞机大战游戏
  4. linux下基本命令
  5. discuz 生成静态html,Discuz论坛静态化设置方法
  6. eclipse+cdt+MinGW
  7. 用ab进行POST,GET压力测试,且定义header及json的内容
  8. 《Office 365 开发入门指南》
  9. jooq和jdbc_在jOOQ之上构建的RESTful JDBC HTTP服务器
  10. 【C++ 学习笔记】:STL-map
  11. 代理模式 委派模式 策略模式_策略模式
  12. 减法运算的借位标志cf_数学|有理数运算法则及题型汇总
  13. 西电网络攻防大赛--渗透测试第五题
  14. DIY实用工具——看看大神手下的示波器
  15. Android强制设置屏幕旋转方向 Force rotation
  16. python基本写法_python操作文件常用写法
  17. 读书笔记(一)数联网——大数据如何互联
  18. 移动应用数据统计平台(之一)
  19. 通俗易懂:什么是.NET?.NET Framework?.NET Core?(比较全面)
  20. 百度账号找回服务器,百度网盘秒删的资源,用这工具一键找回

热门文章

  1. 使用扩展方法和静态门面类实现伪领域对象
  2. 一个检查分区内存并且发送邮件的shell脚本
  3. 关于Entity Framework自动关联查询与自动关联更新导航属性对应的实体注意事项说明...
  4. vue-cli——vue-resource登录注册实例
  5. log4j与commons-logging slf4j的关系
  6. Fedora 24 Alpha带着Gnome 3.20姗姗来迟
  7. 集成服务入门(实验9)日志记录和邮件通知
  8. hdu 2552 三足鼎立 关于tan的数论
  9. 【python教程入门学习】利用Python绘制关系网络图
  10. Python开发植物大战僵尸游戏(附github项目地址)