a表id,name,age
b表id ,name,age
字段都一样现在要一条语句更新a的id,name两个字段使得a表前十行的数据跟b的前世行的数据一样只更新id,name两字段

解决方案 »

  1.   

    update a
    set (a.id,a.name)=
    (
    select b.id,b.name 
    from b
    where a.rownum=b.rownum
    and b.rownum<=10
    )
    where a.rownum<=10
      

  2.   

    不行,a.rownum ,b.rownum 有问题
    提示ORA-01747: user.table.column, table.column 或列说明无效
      

  3.   

    Update a t2
     Set (Id, Name) = ( Select Id, Name From (Select t.Idrow, T1.Id, T1.Name
     From (Select Rowid As Idrow, Rownum As Num, Id, Name
     From a
    Where Rownum < 11) t,
    (Select Rownum As Num, Id, Name From b Where Rownum < 11) T1
    Where t.Num = T1.Num)
    Where idrow = t2.Rowid);
      

  4.   

    Update a t2
     Set (Id, Name) = ( Select Id, Name From (Select t.Idrow, T1.Id, T1.Name
     From (Select Rowid As Idrow, Rownum As Num, Id, Name
     From a
    Where Rownum < 11) t,
    (Select Rownum As Num, Id, Name From b Where Rownum < 11) T1
    Where t.Num = T1.Num)
    Where idrow = t2.Rowid);
      

  5.   

    4楼写的不错,我参照写的。
    create table a as select * from dba_objects;
    create table b as select * from dba_objects;update a
       set (object_id, object_name) =
        (
    select xb.object_id, xb.object_name
      from 
    (
    select rowid rid, rownum rn
      from a
    ) xa
    ,
    (
    select object_id, object_name, rownum rn
      from b
     where rownum <= 10
    ) xb
      where xa.rn = xb.rn
        and xa.rid = a.rowid
    )
     where rownum <= 10;
      

  6.   

    update a
       set (object_id, object_name) =
               (
            select xb.object_id, xb.object_name
              from 
                (
                    select rowid rid, rownum rn
                      from a
                     where rownum <= 10
                ) xa
                ,
                (
                    select object_id, object_name, rownum rn
                      from b
                     where rownum <= 10
                ) xb
              where xa.rn = xb.rn
                and xa.rid = a.rowid
            )
     where rownum <= 10;
      

  7.   

    看上去简单实际很难阿;
    update a
       set (id, name) = (select id, name
                           from (select rd, id, name
                                   from (select a.rowid rd, rownum rn
                                           from a
                                          where rownum < = 10) m,
                                        (select id, name, rownum rn
                                           from b
                                          where rownum <= 10) n
                                  where m.rn = n.rn) t
                          where a.rowid = t.rd)
      

  8.   

    update 里面嵌入了3层select,有没有更好的方法呢!