UPDATE M SET M.[A]=(SELECT N.[A] FROM N,M WHERE N.C=M.C AND N.D =@X)
,M.[B]=(SELECT N.[B] FROM N,M WHERE N.C=M.C N.D=@X)  WHERE M.D=@Y

解决方案 »

  1.   

    UPDATE m SET
       m.a = (select a from n  WHERE m.c = n.c and n.d = x and m.d = y ) ,
       m.b = (select b from n  WHERE m.c = n.c and n.d = x and m.d = y )
      
      

  2.   

    符合sql92的sql语句都可以在pl/sql里面用的啊
      

  3.   

    谢谢,但如果update的字段很多,不是只有两个,那这样写岂不是很麻烦,
    我想用cursor取出数据,再一条一条update,
    还有更好的方法吗?
      

  4.   

    declare
    cursor c2 is
    select column_name from user_table where table_name='M';
    cursor c3 is
    select column_name from user_table where table_name='N';
    begin
    for v2 in c2 loop
    for v3 in c3 loop
    if v2.column_name=v3.column_name then
    str:='update m set '||c2.column_name||'=(select '||c3.column_name||' from n where n.c=m.c and n.d=x) where m.d=y';
    execute immediate str;
    end if;
    end loop;
    end loop;
    end;
    /
      

  5.   

    UPDATE m SET (a,b) = (select a,b from n WHERE n.c = m.c and n.d = x )
     where m.d = y 
      

  6.   

    UPDATE m SET (a,b) = (select a,b from n WHERE n.c = m.c and n.d = x )
     where m.d = y 
       and exists(select 1 from n WHERE n.c = m.c and n.d = x )