oracle from 两个表,Oracle中只更新两张表对应数据的方法

先建立一个结构一模一样的表emp1,并为其插入部分数据

create table emp1

as

select * from emp where deptno = 20;

update掉emp1中的部分数据

update emp1

set sal = sal + 100,

comm = nvl(comm,0) + 50

然后我们试着使用emp1中数据来更新emp中sal 和 comm这两列数据。

我们可以这么写

Update emp

Set(sal,comm) = (select sal,comm. From emp1 where emp.empno

= emp1.empno)

Where exists (select 1 from emp1 where emp1.empno =

emp.empno)

请你尤其注意这里的where子句,你可以尝试不写where子句来执行以下这句话,你将会使得emp中的很多值变成空。

这是因为在oracle的update语句中如果不写where子句,oracle将会默认的把所有的值全部更新,即使你这里使用了子查询并且某在值并不能在子查询里找到,你就会想当然的以为,oracle或许将会跳过这些值吧,你错了,oracle将会把该行的值更新为空。

我们还还可以这么写:

update (select a.sal asal,b.sal bsal,http://www.doczj.com/doc/c716d383910ef12d2bf9e717.htmlm acomm,

http://www.doczj.com/doc/c716d383910ef12d2bf9e717.htmlm bcomm from emp a,emp1 b where a.empno = b.empno)

set asal = bsal,

acomm = bcomm;

这里的表是一个类视图。当然你执行时可能会遇到如下错误:

ERROR 位于第 2 行:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值