现在我有一个疑问:在scott/tiger用户下,修改表EMP,将每个部门工资最高的员工薪水提高500块钱 
我的SQL语句是:SQL> update emp2
  2  set sal=sal+200
  3  where empno in 
  4  (select empno
  5   from ( select * 
  6          from (select emp.*,row_number() over(partition by deptno order by sal desc) as rank 
  7                from emp )a )t 
  8   where rank=1);
但是命令提示符只给了如下提示:1 row updated。当我再查询一遍的时候发现,并没有修改任何一条信息,真是郁闷。恳请高手指点。谢谢……

解决方案 »

  1.   

    update emp2
    set sal=sal+200
    from emp2 t
    where sal = (select max(sal) from emp2 where deptno = t.deptno)commit;
      

  2.   

    我是想扩展一下 :比如说公司年终分红,给每个部门工资最高的前N名员工提薪M元以表示奖励,
    那么楼上的大侠的代码就不通用了!
    SQL> update emp2
      2  set sal=sal+200
      3  where empno in 
      4  (select empno
      5   from ( select * 
      6          from (select emp.*,row_number() over(partition by deptno order by sal desc) as rank 
      7                from emp )a )t 
      8   where rank between 1 and 3);--前三名首先说一下:oracle没有top关键字。
      

  3.   

    可以使用 row_number() over (partition 部门 order by 工资 desc)
      

  4.   

    应该是没有提交被回滚的原因
    emp2,emp两个表?
    如果工资最高的出现并列怎么办,用row_number不太好吧
    给工资高的提薪,工资低的不管..这个制度问题更严重。嘿嘿
      

  5.   

    肯定是没COMMIT;楼主不好意思说出来
      

  6.   

    不是commit的问题。我有遇到楼主的同样的问题。也纳闷了一个下午,后来也没解决,最后只能不了了之,就当他一条update都没有。
      

  7.   

    呵呵 更郁闷了 sql语句一点都没有变, 今天居然可以运行出正确结果了,昨天试了半天也不行。
    上帝啊……