SELECT A.Aac001,
 A.Aac002,
 B.Aab001,
 B.Ajc090,
 B.Aac021
  FROM a
 INNER JOIN b
 ON A.Aac021 = B.Aac021
 WHERE B.Aae116 = '1'
AND (B.Ajc090 = To_Date('2011-01-01', 'yyyy-mm-dd') OR
 To_Date('2011-01-01', 'yyyy-mm-dd') = To_Date('2011-01-01', 'yyyy-mm-dd'))
AND NOT EXISTS (SELECT Aac021
 FROM c
WHERE Aae002 = '201109'
  AND C.Aac001 = B.Aac001
  AND C.Aac021 = B.Aac021);

解决方案 »

  1.   

    SELECT A.Aac001,
           A.Aac002,
           B.Aab001,
           B.Ajc090,
           B.Aac021
    FROM a
    INNER JOIN
          (SELECT B.Aab001,
                  B.Ajc090,
                  B.Aac021
           FROM B
           WHERE NOT EXISTS (SELECT Aac021 FROM c WHERE Aae002 = '201109' AND C.Aac001 = B.Aac001 AND C.Aac021 = B.Aac021))
           b ON A.Aac021 = B.Aac021
    WHERE B.Aae116 = '1'
    AND (B.Ajc090 = To_Date('2011-01-01', 'yyyy-mm-dd') )B
      

  2.   


    SELECT A.Aac001,
           A.Aac002,
           B.Aab001,
           B.Ajc090,
           B.Aac021
    FROM a
    INNER JOIN
          (SELECT B.Aab001,
                  B.Ajc090,
                  B.Aac021
           FROM B
           WHERE NOT EXISTS (SELECT Aac021 FROM c WHERE Aae002 = '201109' AND C.Aac001 = B.Aac001 AND C.Aac021 = B.Aac021))
           b ON A.Aac021 = B.Aac021
    WHERE B.Aae116 = '1'
    AND (B.Ajc090 = To_Date('2011-01-01', 'yyyy-mm-dd') )
      

  3.   


    SELECT A.Aac001,
    A.Aac002,
    B.Aab001,
    B.Ajc090,
    B.Aac021
      FROM a
     INNER JOIN b
    ON A.Aac021 = B.Aac021
     WHERE B.Aae116 = '1'
    AND B.Ajc090 = To_Date('2011-01-01', 'yyyy-mm-dd'
    AND NOT EXISTS (SELECT Aac021
    FROM c
    WHERE Aae002 = '201109'
    AND C.Aac001 = B.Aac001
    AND C.Aac021 = B.Aac021)
    UNION
    SELECT A.Aac001,
    A.Aac002,
    B.Aab001,
    B.Ajc090,
    B.Aac021
      FROM a
     INNER JOIN b
    ON A.Aac021 = B.Aac021
     WHERE B.Aae116 = '1'
    AND 
    To_Date('2011-01-01', 'yyyy-mm-dd') = To_Date('2011-01-01', 'yyyy-mm-dd')
    AND NOT EXISTS (SELECT Aac021
    FROM c
    WHERE Aae002 = '201109'
    AND C.Aac001 = B.Aac001
    AND C.Aac021 = B.Aac021); 
      

  4.   

     To_Date('2011-01-01', 'yyyy-mm-dd'  
    后少了个括号。
      

  5.   

    那个or 就是 在判断B.Ajc090条件不对时,执行查询全部的。  没看出来效果...
      

  6.   

    你那个or,不管b.ajc090条件对不对,都是执行查询全部的,所以那个判断条件完全没有用。
      

  7.   

       To_Date('2011-01-01', 'yyyy-mm-dd') = To_Date('2011-01-01', 'yyyy-mm-dd')
     中如果第一个输入时间 = 第二个时间  那么会执行全部查询 是这个意思!第二个时间是不变的。
       可不可以创建索引呢?
      

  8.   

    To_Date('2011-01-01', 'yyyy-mm-dd') = To_Date('2011-01-01', 'yyyy-mm-dd')1. 如果等号左侧的内容是个变量就可以理解了。
    2. 创建索引不知道你说的是哪个列创建索引呢?对于
    To_Date('2011-01-01', 'yyyy-mm-dd') = To_Date('2011-01-01', 'yyyy-mm-dd')
    来说两侧都是变量和常量,这个条件是和索引无关的。