INSERT  INTO A1(.......)
 (SELECT .......
    FROM A2
   WHERE A2.X='1'
     AND A2.Y='1'
     AND {
              A2.Z='C'时
             A2.S=A3.E
            AND A3.F='0'or'2'            A2.Z='P'时
             A2.T=A3.E
            AND A3.F='0'or'2'
         }
 )整体意思如上。
关键是  {}  中的不会写,或者 我的整体框架结构写错了,也可以重新整体写(用一括sql写)。

解决方案 »

  1.   

    INSERT  INTO A1(.......)
     SELECT .......
        FROM A2
       WHERE A2.X='1'
         AND A2.Y='1'
         AND A2.Z='C'
                and A2.S=A3.E
                AND A3.F='0'or'2'
     union all
    SELECT .......
        FROM A2
       WHERE A2.X='1'
         AND A2.Y='1'
     A2.Z='P'
           and      A2.T=A3.E
                AND A3.F in('0','2');
      

  2.   

    INSERT  INTO A1(.......)
     (SELECT .......
        FROM A2
       WHERE A2.X='1'
         AND A2.Y='1'
         AND {  ( case A2.Z
                 when C  then A2.S=A3.E AND A3.F='0'or'2'
                 when P  then A2.T=A3.E AND A3.F='0'or'2'
                 end  )             
             }
     )
      

  3.   

    INSERT  INTO A1(.......)
     (SELECT .......
        FROM A2
       WHERE A2.X='1'
         AND A2.Y='1'
         AND (
                (A2.Z='C' AND  A2.S=A3.E  AND A3.F IN ('0','2'))
                OR
                (A2.Z='P' AND  A2.T=A3.E  AND A3.F IN ('0','2'))
             )
     )
      

  4.   

    各位大哥、大姐:
     A3也是表。
    我这样写了: 
    INSERT    INTO  A1(.......)  
        ( SELECT  .......  
            FROM  A2  
           WHERE  A2.X='1'  
             AND  A2.Y='1'  
             AND  ((A2.Z='C' AND A2.S IN SELECT A3.E FROM A3 WHERE A3.F='0'or'2') 
                 OR (A2.Z='P' AND A2.T IN SELECT A3.E FROM A3 WHERE A3.F='0'or'2')
                  )
     在 PL/SQL 试了不行。望多多指教。 经理下午要的。谢谢。
      

  5.   

    INSERT  INTO A1(.......)
     (SELECT .......
        FROM A2,A3
       WHERE A2.X='1'
         AND A2.Y='1'
         AND (
                (A2.Z='C' AND  A2.S=A3.E )
                OR
                (A2.Z='P' AND  A2.T=A3.E )
         
             )
         AND A3.F IN ('0','2')
     )
      

  6.   

    licsth() :
    您的办法我试了一下,在 PL/SQl 运行通过。先送出100分。
    烦您确认一下逻辑对不。
    在线等。
      

  7.   

    licsth()  :  的办法 最终在A2中选出一条记录插入A1中两条重复的。
      

  8.   

    A2、A3没有别的对应关系吗?这样就只是从A2中取了,总觉得还差点关系
      

  9.   

    完全有可能重复因为两个表连接的时候,满足下列条件的记录可能是同一条,关联出重复记录:
         AND (
                (A2.Z='C' AND  A2.S=A3.E )
                OR
                (A2.Z='P' AND  A2.T=A3.E )
         
             )
    在select 后使用distinct试试。
      

  10.   

    我说的是对应A3表的同一条,如:A2.S=A2.S=A3.E的时候。
      

  11.   

    licsth() :  您好,谢谢您还在关注。
      
      在select 后使用了distinct 会把本来表中重复的记录也给删除了呀!????
      

  12.   

    duanzilin(寻) : 您好:
         逻辑如下:
          从 表A2 选出所有字段插入 表A1 中(表A1和表A2的各个字段类型等同)。
          选择表A2中字段的条件为:
                一、表A2.字段1 = '1'
                二、表A2.字段2 = '1'
                三、表A2.字段3 = 'C' 时
                         A2.字段4 = 表A3.字段1 and 表A3.字段2 = '0' or '2'
                    表A2.字段3 = 'P' 时
                         A2.字段5 = 表A3.字段1 and 表A3.字段2 = '0' or '2'
      以上是详细设计书上写的。要求用一括Sql(insert into ....select....from . where...)。
      

  13.   

    INSERT  INTO A1(.......)
     (SELECT .......
        FROM A2 a
       WHERE a.X='1'
         AND a.Y='1'
         AND (
                (a.Z='C' AND  (select count(*) from A3 where A3.E=a.S and A3.F in ('0','2'))>0)
                OR
                (a.Z='P' AND  (select count(*) from A3 where A3.E=a.T and A3.F in ('0','2'))>0)  
             )
     )
    试试这个
      

  14.   

    试试这个:
    INSERT  INTO A1(.......)
     (SELECT .......
        FROM A2
       WHERE A2.X='1'
         AND A2.Y='1'
         AND (exists (select 1 from a3 
                            where a2.z = 'c' 
                            and a2.s = a3.e
                            and a3.f in (0,2))
             or exists(select 1 from a3 
                            where a2.z = 'p' 
                            and a2.t = a3.e
                            and a3.f in (0,2))
             )
     )
      

  15.   

    防止重复,试试:
    ...
         AND (
                (((A2.Z='C' AND  A2.S=A3.E ) OR (A2.Z='P' AND  A2.T=A3.E ))
                 and A2.S<>A2.T
                 )
                or
                (
                 A2.S=A3.E and A2.S=A2.T
                )
             )