爱问知识人 爱问教育 医院库

Oracle中如何只更新两张表对应数据?

首页

Oracle中如何只更新两张表对应数据?

Oracle中如何只更新两张表对应数据?

提交回答

全部答案

    2017-07-27 16:09:24
  •   先建立一个结构一模一样的表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中的很多值变成空。 我们还还可以这么写: update (select a。sal asal,b。sal bsal,a。
      comm acomm, b。comm bcomm from emp a,emp1 b where a。empno = b。empno) set asal = bsal, acomm = bcomm; 这里的表是一个类视图。当然你执行时可能会遇到如下错误: ERROR 位于第 2 行: ORA-01779: 无法修改与非键值保存表对应的列 这是因为新建的表emp1还没有主键的缘故 下面增加一个主键 alter table emp1 add constraint pk_emp1 primary key (empno); 执行之后 在执行前面的语句就能成功。
       这里我们总结一下: 在oracle中不存在update from结构,所以遇到需要从另外一个表来更新本表的值的问题的时候,有两种解决的办法: 一种是使用子查询,使用子查询时一定要注意where条件(一般后面接exists子句),除非两个表是一一对应的,否则where条件必不可少,遗漏掉where条件时可能会导致插入大量空值。
      

    陈***

    2017-07-27 16:09:24

类似问题

换一换

相关推荐

正在加载...
最新问答 推荐信息 热门专题 热点推荐
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):