2021-04-13 Oracle将查询结果来更新表数据

最近遇到需求,在将excel的数据导入到oracle数据库时,需要将入表的数据更新其他的一部分字段数据.
举个例子 : 现在oracle数据库存在数据表
users 用户表(userId 用户id,deptNo 用户的部门编号,deptName 用户部门名称, level 用户等级, levelName 用户等级名称);
department 部门表(deptNo 部门编号, deptName 部门名称)
levels 等级表 (level 等级 ,levelName 等级名称)

假设想用户表(users)导入数据,不会导入部门名称和等级名称,需要在数据库来查询部门表和等级表来更新数据。此时就需要查询结果来作为更新数据了。
sql 如下:

update users u set 
deptName=(select depaName from department where deptNo=u.deptNo),
levelName=(select levelName from levels where level=u.level)
where deptName is null or levelName is null

上述sql是针对查不同的表去更新数据,每个字段去查不同的表,如果 更新的多个字段都是同一个表的话 ,再这样 一个字段查一次效率会比较慢。所以要将一个表或多个表的查询结果来同时更新表数据。

假设现在存在 users1表,表字段和 user表相同,然后users1表只有userId字段有数据,现在需要用 users表的数据来更新users1表,用两个字段来举例

update users1 u1 set (deptNo,deptName)=
(select u.deptNo,de.depaName from users u left join department de on u.deptNo=de.deptNo where u.userId=u1.userId)
 where deptNo is null

这样就可以 去users表关联 department表查询出来的 用户的部门编号和部门名称来更新到users表中了。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值