Oracle9i环境中,使用PL/SQL操作数据库,有两张表A和B,
A的字段结构:c,d,e,f,g,h,B字段结构:d,e,g,k,m,s,A和B有相同的字段d,e,g
如何将表A中的d,e,g的数据复制到表B中对应的d,e,g下,c,f,h的数据不要复制,具体的SQL语句该怎么写??
恳请高手指教,不胜感激!!

解决方案 »

  1.   

    update b
      set b.d=(select d from a where 条件)
        , b.e=(select e from a where 条件)
        , b.g=(select g from a where 条件)
      

  2.   

    非常感谢,但是还有个非常现实的问题,实际操作的都是非常大的表,字段起码好几十个,如果有40个相同的字段,还用上面的方法写SQL语句实在太麻烦了啊,还有更简便的吗??
      

  3.   

     insert into b(d,e,g) values(a.d,a.e,a.g) from a  
      

  4.   

    我可能没有表达清楚,我的意思是如果有40个相同字段,我不可能自己去一一寻找是哪40个字段相同,
    我想写个SQL语句,让语句自己去寻找比对哪些字段相同,遇到相同字段的就把数据插入到对应字段下,谢谢!
      

  5.   

    呵呵,我想你还是对应字段写sql吧,如果两表的字段对应名称不一样,怎么找?
    有的地方是不能偷懒的,如果楼主想出了,请继续.
      

  6.   

    sql脚本不可能自动去匹配字段名相等的字段的, 楼主死了这条心, 安心的自己写代码吧.
    哦, 也不是完全没有办法, 可以通过访问user_tab_columns表来自己写动态SQL, 不过不推荐这么做.
      

  7.   

    能说具体点吗??根据表A和B的例子能写出SQL语句吗?
      

  8.   

    我想bugchen888的意思是写一个程序块。
    大致思路如下:
    1.通过A表的名字从user_tab_columns中取出所有的字段。
    2.用1取得的字段名和B表的表名为条件,判断user_tab_columns中是否存在相应的数据。如果有说明B表中也有该字段,然后将该字段拼接到sql语句用。如果没有,那么继续判断下一个。
      

  9.   

    如果两个表的结构一样我认为可以这样:(表tab1,表tab2)tab1到tab2
    create proc copyto
    as 
    select * from tab1insert tab2 exec copyto应该可以了
      

  10.   

    不好意思我还以为在SQLSERVER中了不过原理都是一样的。
      

  11.   

    这用SQL语句很难实现,还是通过自己写程序实现简单些,你可以通过提取两个表的元数据,然后比较字段,将相同字段名的数据读取过去。
      

  12.   

    insert into A(d,g,e) select d,d,e from B
      

  13.   

    对不起,上面写错一个
    insert into A(d,g,e) select d,g,e from B