最近遇到需求,在将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表中了。