我有一个表A,一个表B,A和B的结构不同...有一个映射规则,把A表部分字段映射到B表...
映射规则有的是赋常量,有的是直接赋A表的值给B表,有的是根据某些条件把A表的值赋给B表,
还有是根据A表的值再去取其它表的值再赋给B表...开始我用游标,没什么难度,不过老板说表里的数据可能会过亿,用游标一条条循环太慢...
要求用一条SQL语句搞定...求达人赐教...

解决方案 »

  1.   

    是不是这样啊
    insert into a 
    (select 1,(select b.b1,b.b2 from b where ....)) from dual;
      

  2.   

    谢谢LS的,不过比这复杂的多...
    有些可以通过DECODE解决..
    但有的,比如说b.b1和X都是要插入的数据,
    b.b1直接写就行了,而X是以b.b1为条件从另一张表取出来的数据...也就是说,在一条数据中,某些字段是以其它字段为条件再从另外的表的取出来的...
    不知道这样能不能在一条SQL中实现...
      

  3.   

    用DECODE,你业务逻辑讲得不清楚,只能提示这么多了。不过效率也不一定就高,说不定还不如你那个游标呢
      

  4.   

    打个比方 
    A表             B表             C表          D表
    a,b,c         d,e           f,g         h,i
    -----         -----         ----        ----
    A.a = B.d,
    A.b = C.f where C.g = B.d,
    A.c = D.h where D.i = B.e,这种映射关系能在一句SQL中实现否?
      

  5.   

    假设A表跟B表是由j字段关联update A t1 set t1.a = (select max(t2.d) from B t2 where t1.j=t2.j),
    t1.b = (select max(t3.f) from c t3,b t4 where t3.g = t4.d and t1.j=t4.j),
    t1.c = (select max(t3.f) from d t5,b t6 where t5.i = t6.e and t1.j=t6.j)
      

  6.   

    这个估计是产生一个汇总的什么表,然后在生成基础报表吧。
    个人分析还是不同的规则一个sql语句,用几个sql语句来处理更合理一些。
    在某些情况下,一条sql语句加上复杂的条件反而比多条sql语句更花费时间。
    如果有统一的规划,甚至可以做成一个webservice
      

  7.   

    欢迎加入本人的QQ群,群号5586686,身份认证输入如:JAVA、JSP、STRUTS等都可以,非软件开发人员勿加,谢谢合作!