前提:    
    有2张表,A1、A2,
    A1 中有 fields1,fields2 两个字段,
    A2 中有 num,fields1,fields2 三个字段;
    A2 表对A1的外键是 fields2 ;
    A2表对A1表为多对1的映射。问题描述:    先需要将A2表的字段 fields1 更新为 A1 表中的fields1;A1、A2表中的记录条数未知。
例如:A1表中有如下数据:
fields1  fields2 
001      abc
002      bcd
014      cde
...
A2表中有如下数据:
num  fields1 fields2 
1    0       abc
2    1       abc
3    1       abc
4    0       bcd
5    0       bcd
6    0       cde 
.....
A2表更新结果如下:
num  fields1   fields2 
1    001       abc
2    001       abc
3    001       abc
4    002       bcd
5    002       bcd
6    014       cde PS:谢谢各位大侠啦
   

解决方案 »

  1.   

    update A2 t set  t.fields1 =A1.fields1 WHERE t.fields2 =(SELECT fields2 FROM A1)  
      

  2.   


    t.fields2 =(SELECT fields2 FROM A1)  把这个等号改成IN老是忘记了。
      

  3.   


    create or replace procedure update_Job as
    begin
      for varCode in (select a.fields1,a.fields2 from A1 a) loop
          for varStr in (select a.num,a.fields1,a.fields2 from A2 a
            where a.fields2 = varCode.Fields2 and a.fields1 != varCode.Fields1) loop
            update A2 t
               set t.fields1 = varCode.Fields1
             where t.num = varStr.Num;
            commit;
          end loop;
      end loop;
    end update_Job;
      

  4.   

    感谢 (bin3509) 和 (小菜西风)  的帮忙(bin3509) 说的SQL语句 我没看明白是干嘛的 感觉有语法错误吧?(小弟是菜鸟,只是说说个人的看法,别介意)
     
    (小菜西风)  写感觉没问题 但无法编译过去 系统提示编译有错误