有两张表A,B
A中有字段(A1,A2,A3,A4,A5,A6)
表A中有多条记录,A1为主键
B中有字段(A1,A2,A3,A4)
表B中有多条记录,与表A中主键列相同,为A1现在要实现将表B中的所有记录A2,A3,A4,插入到表A中与表B主键A1相对应的记录中去。在线等,谢谢各位高手!

解决方案 »

  1.   

    insert into a(A2,A3,A4) select A2,A3,A4 from b where a.A1=b.A1;
      

  2.   

    应该是更新表A中的记录吧!如果表A和表B的A1一样的话!楼主是不是这个意思?
      

  3.   

    对,是更新记录,如果是插入,那就太easy了
      

  4.   


    如果遇到有多条B对应同一个A,该如何选择那个B的记录呢。 
    以下语句只是把max的值做进去了。 你可以根据你的需要自行修改insert into a (A2,A3,A4)=select max(A2),max(A3),max(A4) from b where a.A1=b.A1;
      

  5.   

    update a set (a2,a3,a4)=(select a2,a3,a4 from b where a.a1=b.a1)
    where exists(select 1 from b where a.a1=b.a1)
      

  6.   


    不好意思,不是insert是update
    update a set (A2,A3,A4)=select max(A2),max(A3),max(A4) from b where a.A1=b.A1;
      

  7.   

    补充一下:
    要实现的功能的确是对A表中已有的A2,A3,A4字段值进行更新,而不是新添加插入记录。
    表A与表B中A1都是各自表的主键列,记录都具有唯一性。
      

  8.   

    我想请问一下cosio兄,这句话是放在这里是什么意思,为什么要写在这里,谢谢。O(∩_∩)O
      

  9.   

    红字的意思是只更新两个表可以关联到的记录,
    如果不加这句会把a表所有的记录都更新,没有关联上的a2,a3,a4全部会被置为null
      

  10.   

    5楼的就可以实现的啊;
    sql code :
    update a set (a2,a3,a4)=(select a2,a3,a4 from b where a.a1=b.a1) 
    where exists(select 1 from b where a.a1=b.a1)
      

  11.   

    这个也是oracle更新操作时需要注意的地方,跟sqlserver理解上有点差异
      

  12.   

    因为我看到你的问题中表B和表A中的a1都是主键,所以存在一一对应关键,要exists这句,会加快更新的速度!
      

  13.   

    谢谢各位的帮助,问题解决了,十分感谢cosio兄,哈哈~
    感谢inthirties兄所有关注的朋友们