select ta.a,
         ta.zq,
         ta.sz,
         ta.hq,
         ta.hqp,
         ta.bz,
         ta.dm
    from (select *
            from A2011
           where a <= to_date('2011-08-16', 'yyyy-mm-dd')) ta
    join (select max(a) as fdate, zq, sz
            from A2011
           where fsh = 2
             and a <= to_date('2011-08-16', 'yyyy-mm-dd')
           group by zq, fsz) tb on ta.a= tb.a
                                    and ta.zq= tb.zq
                                    and ta.sz= tb.sz
   where fsh = 2该查询语句在9i 版本中查询很慢!10G的无问题! 请问可以通过什么方法解决!?

解决方案 »

  1.   

    你在最后还加了一个where fsh = 2 请问那你Join要做什么事?
    还不如不要了啊。
      

  2.   

    where fsh没有指定具体的那个表,为什么join查询表后的已经过滤了fsh=2
    为什么在连接查询中还要用呢
      

  3.   

    oracle devloper开发工具具体看一下执行的计划了。
      

  4.   

    就这样吧,你用了join 就是ta*tb的数量,很多了
      

  5.   

    SELECT ta.a, ta.zq, ta.sz, ta.hq, ta.hqp, ta.bz, ta.dm
      FROM a2011 ta
     WHERE a <= to_date('2011-08-16', 'yyyy-mm-dd')
       AND existst (SELECT MAX(a) AS fdate, zq, sz
              FROM a2011 tb
             WHERE fsh = 2
               AND tb.a <= to_date('2011-08-16', 'yyyy-mm-dd')
               AND ta.a = tb.a
               AND ta.zq = tb.zq
               AND ta.sz = tb.sz
             GROUP BY zq, fsz);看下这个可以不?
      

  6.   

    这条sql语句在9I表是的orcal 里面超级慢。。 在10G的没有问题。 表是一样的!