共3张表表A{a1,a2,a3,a4,a5}
表B {b1,b2,b3,b4,b5}
表C {c1,c2,c3,c4 ,c5}连接条件
  1: A.a1 = B.b1(+) and A.a2 = B.b2(+) and A.a3 = B.b3(+)
  2:  A.a4 = C.c1(+) and A.a5 = C.c2(+)
  3: 麻烦的是这个条件,C中的数据是按c1,c2分组的,条件要求c中的数据所在组中的c3字段值最大的那条数据里对应的c4大于指定的值(假设100)效果如下:
SELECT
  B.b4, C.c5
FROM
  A,
  B,
  C,
  (SELECT C.c1,C.c2,C.c4 
    FROM C,
      (SELECT  c1, c2, max(c3) c3 
         FROM  C 
         GROUP BY c1, c2) T2
   WHERE
      C.c1 = T2.c1 AND C.c2 = T2.c2 AND C.c3 = T2.c3) T1
WHERE
  A.a1 = B.b1(+) AND 
  A.a2 = B.b2(+) AND 
  A.a3 = B.b3(+) AND
  A.a4 = C.c1(+) AND
  A.a5 = C.c2(+) AND
  C.c1 = T1.c1   AND
  C.c2 = T1.c2   AND
  T1.c4 > 100问题是这么写效率太低了,苦思一下午没想出什么办法,求高手指点

解决方案 »

  1.   

    补充说明一个:需要使用标准sql
      

  2.   

    SELECT
      B.b4, C.c5
    FROM
      A,
      B,
      C,
      (SELECT C.c1,C.c2,C.c4 
        FROM C,
          (SELECT  c1, c2, max(c3) c3 
             FROM  C          GROUP BY c1, c2) T2
       WHERE
          C.c1 = T2.c1 AND C.c2 = T2.c2 AND C.c3 = T2.c3) T1
    WHERE
      A.a1 = B.b1(+) AND 
      A.a2 = B.b2(+) AND 
      A.a3 = B.b3(+) AND
      A.a4 = C.c1(+) AND
      A.a5 = C.c2(+) AND
      C.c1 = T1.c1   AND
      C.c2 = T1.c2   AND
      T1.c4 > 100
      

  3.   

    SELECT
      B.b4, C.c5
    FROM
      A,
      B,
      C,
      (SELECT  c1, c2, max(c3) c3 
             FROM  C 
             where c4>100
             GROUP BY c1, c2) T1
    WHERE
      A.a1 = B.b1(+) AND 
      A.a2 = B.b2(+) AND 
      A.a3 = B.b3(+) AND
      A.a4 = C.c1(+) AND
      A.a5 = C.c2(+) AND
      C.c1 = T1.c1   AND
      C.c2 = T1.c2   AND
      

  4.   

    SELECT
      B.b4, C.c5
    FROM
      A,
      B,
      C,
      (SELECT  c1, c2, max(c3) c3 
             FROM  C 
             where c4>100
             GROUP BY c1, c2) T1
    WHERE
      A.a1 = B.b1(+) AND 
      A.a2 = B.b2(+) AND 
      A.a3 = B.b3(+) AND
      A.a4 = C.c1(+) AND
      A.a5 = C.c2(+) AND
      C.c1 = T1.c1   AND
      C.c2 = T1.c2注意建索引
      

  5.   

    感谢城城相助,将c4条件提前的确极大缩短了执行时间,从80秒降到3秒了
    你给我的代码结果上有点不一致,3层select还是不能避免
    虽然实际上c4的条件没有缩小数据规模,但是效果却如此惊人,真实很奇怪
    不管怎么说现在已经完全可以接受了,非常感谢