我现在遇到这么个棘手的问题,就是在如下的Oracle表中:
     A      B   
1   未知    2
2   未知    2
3   未知    2我现在要把这三条记录的A字段分别修改为:abc,def,ghi 
现在遇到的问题是我不知道A字段的值,我只知道要将B字段值为2的三条数据的A字段分别更新为abc,def,ghi
我该怎么写SQL语句?才能使得:
     A      B   
1   abc    2
2   def    2
3   ghi    2

解决方案 »

  1.   

    三条语句分开执行,顺序不要乱
    UPDATE TABLE
    SET A=ghi
    where b=2 and rownum<=3;update table
    set a=def
    where b=2 and rownum<=2update table
    set a=abc
    where b=2 and rownum<=1
      

  2.   

    那请问,rownum是个什么参数呢?
      

  3.   

    rownum 是 Oracle 隐含的行记录号,无论你用什么方式排序,第一条记录的rownum始终等于1.
      

  4.   

    只要给rownum取别名,就可以使用它作为一条记录的标示。
      

  5.   

    怎么会不知道呢?
    对楼主的描述,我的理解是A字段被加密了,或者乱码了
    是不是这样?要不然select一下不就知道了另外我建议用rowid来更新,rowid是一个固定值,不会变的
      

  6.   

    我觉得这样更好一些:
    UPDATE TABLE
    SET A=decode(rownum,1,'abc',2,'def',3,'ghi',A)
    where b=2;
      

  7.   

    先查询该语句  select rowid ,a,b from table_name where b=2
    然后再根据rowid 列的值去修改,rowid是该条记录的物理地址,具有唯一性
      

  8.   


    UPDATE TABLE
       SET A = DECODE(ROWNUM, 1, 'abc', 2, 'def', 3, 'ghi', A)
     WHERE B = 2;
    恩,这个不错。也好理解。
      

  9.   


    这个用法学习了 不知道在update中rownum会自动因条件不同会变化