Oracle update 多表关联更新
需求
有一个部门的表(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 多表关联更新相关推荐
- 22、UPDATE多表关联更新
MySQL 可以基于多表查询更新数据.对于多表的 UPDATE 操作需要慎重,建议在更新前,先使用 SELECT 语句查询验证更新的数据与自己期望的是否一致. 下面我们建两张表,一张表为 produc ...
- mysql 关联更新_MySQL UPDATE多表关联更新
MySQL 可以基于多表查询更新数据.对于多表的 UPDATE 操作需要慎重,建议在更新前,先使用 SELECT 语句查询验证更新的数据与自己期望的是否一致. 下面我们建两张表,一张表为 produc ...
- mysql update 多表更新_MySQL UPDATE多表关联更新
MySQL 可以基于多表查询更新数据.对于多表的 UPDATE 操作需要慎重,建议在更新前,先使用 SELECT 语句查询验证更新的数据与自己期望的是否一致. 下面我们建两张表,一张表为 produc ...
- MySQL UPDATE多表关联更新
MySQL 可以基于多表查询更新数据.对于多表的 UPDATE 操作需要慎重,建议在更新前,先使用 SELECT 语句查询验证更新的数据与自己期望的是否一致. 下面我们建两张表,一张表为 produc ...
- Oracle中多表联合更新处理方法详解
ORACLE中多表关联更新与SQL Server和MYSQL的语法稍有不同,现将ORACLE中多表关联更新的几种方法处理如下: 一.创建测试表和添加测试数据 CREATE TABLE t_test01 ...
- Oracle\MS SQL Server的数据库多表关联更新UPDATE与多表更新
一条Update更新语句是不能更新多张表的,除非使用触发器隐含更新.而表的更新操作中,在很多情况下需要在表达式中引用要更新的表以外的数据.我们先来讨论根据其他表数据更新你要更新的表 一.MS S ...
- Oracle多表关联更新
这里写目录标题 Oracle多表关联更新 一.最简单的形式-单表更新 二.两表(多表)关联update -- set为简单的数据(直接是值),且仅在where字句中的连接 三.两表(多表)关联upda ...
- 表的插入、更新、删除、合并操作_14_ 通过表关联更新多个表多个字段
通过表关联更新多个表多个字段 需求描述 需求:更新emp表里的sal字段的值为temp表里的sal乘以1.5,同时更新temp表里ename为emp表里的值,匹配条件是两个表的deptno. 解决方法 ...
- 表的插入、更新、删除、合并操作_13_通过表关联更新多个字段
通过表关联更新多个字段 需求描述 需求:更新emp表里的sal字段的值为temp表里的sal乘以1.5,同时更新ename为temp表里的值, 匹配条件是两个表的deptno.. 解决方法:这里通过U ...
最新文章
- 金融行业数据管理将何去何从?
- 从0 到1 又如何?他逆袭成边缘云计算的贡献者
- 用Javascript模拟微信飞机大战游戏
- linux下基本命令
- discuz 生成静态html,Discuz论坛静态化设置方法
- eclipse+cdt+MinGW
- 用ab进行POST,GET压力测试,且定义header及json的内容
- 《Office 365 开发入门指南》
- jooq和jdbc_在jOOQ之上构建的RESTful JDBC HTTP服务器
- 【C++ 学习笔记】:STL-map
- 代理模式 委派模式 策略模式_策略模式
- 减法运算的借位标志cf_数学|有理数运算法则及题型汇总
- 西电网络攻防大赛--渗透测试第五题
- DIY实用工具——看看大神手下的示波器
- Android强制设置屏幕旋转方向 Force rotation
- python基本写法_python操作文件常用写法
- 读书笔记(一)数联网——大数据如何互联
- 移动应用数据统计平台(之一)
- 通俗易懂:什么是.NET?.NET Framework?.NET Core?(比较全面)
- 百度账号找回服务器,百度网盘秒删的资源,用这工具一键找回
热门文章
- 使用扩展方法和静态门面类实现伪领域对象
- 一个检查分区内存并且发送邮件的shell脚本
- 关于Entity Framework自动关联查询与自动关联更新导航属性对应的实体注意事项说明...
- vue-cli——vue-resource登录注册实例
- log4j与commons-logging slf4j的关系
- Fedora 24 Alpha带着Gnome 3.20姗姗来迟
- 集成服务入门(实验9)日志记录和邮件通知
- hdu 2552 三足鼎立 关于tan的数论
- 【python教程入门学习】利用Python绘制关系网络图
- Python开发植物大战僵尸游戏(附github项目地址)