标量子查询改写

来源:互联网 发布:什么网游有mac版 编辑:程序博客网 时间:2024/05/30 22:53

SELECT A.CONS_NO,

       A.CONS_NAME,

       (SELECTSUM(T.PURCH_PQ)

          FROMGAS_CA.A_CARD_METER_PAY T

         WHERE CONS_NO = A.CONS_NO

           AND T.PURCH_GAS_TIME > TO_DATE('20160229','YYYYMMDD')) 购气量

  FROM GAS_MB.C_CONS A

 WHERE A.ORG_NO LIKE '1125%'

   AND EXISTS

 (SELECT1

          FROM GAS_MB.C_MP B

         WHERE B.CONS_ID = A.CONS_ID

           AND EXISTS

         (SELECT1

                  FROM GAS_MB.C_METER

                 WHERE MP_ID = B.MP_ID

                   AND PRODUCE_FACTIN ('0010','0015', '0024')));

 在子查询的数量比较大的时候查询效率会比较低下,这里用表连接的方式改写一下

SELECT *

  FROM (SELECT A.CONS_NO, A.CONS_NAME, B.购气量

          FROM GAS_MB.C_CONS A,

               (SELECT B1.CONS_NO,SUM(B1.PURCH_PQ) 购气量

                  FROMGAS_CA.A_CARD_METER_PAY B1

                 WHERE B1.ORG_NO LIKE '1125%'

                   AND B1.PURCH_GAS_TIME> TO_DATE('20160229','YYYYMMDD')

                 GROUP BY B1.CONS_NO) B

         WHERE A.ORG_NO LIKE '1125%'

           AND A.CONS_NO = B.CONS_NO(+)

           AND EXISTS

         (SELECT1

                  FROM GAS_MB.C_MP B

                 WHERE B.CONS_ID = A.CONS_ID

                   AND EXISTS

                 (SELECT1

                          FROM GAS_MB.C_METER

                         WHERE MP_ID= B.MP_ID

                           AND PRODUCE_FACTIN ('0010','0015', '0024'))))

 WHERE 购气量 IS NOT NULL;


0 0
原创粉丝点击