SELECT DISTINCT CCN,MAS_LOC,WO_NUM,WO_LINE
FROM (SELECT CCN,MAS_LOC,WO_NUM,WO_LINE FROM GLOVIA_PROD.WO WHERE CCN='CHCIZN' AND MAS_LOC='ZN' AND FIN_CLOSE_DATE IS NULL
      UNION SELECT DISTINCT CCN,MAS_LOC,WO_NUM,WO_LINE FROM GLOVIA_PROD.WO_ISSUE WHERE CCN='CHCIZN' AND MAS_LOC='ZN' AND TRAN_DATE>=TO_DATE('2010-07-22','YYYY-MM-DD')
      UNION SELECT DISTINCT CCN,MAS_LOC,WO_NUM,WO_LINE FROM GLOVIA_PROD.WO_COMP WHERE CCN='CHCIZN' AND MAS_LOC='ZN' AND TRAN_DATE>=TO_DATE('2010-07-22','YYYY-MM-DD')
      UNION SELECT DISTINCT CCN,MAS_LOC,WO_NUM,WO_LINE FROM GLOVIA_PROD.C_WORTG WHERE CCN='CHCIZN' AND MAS_LOC='ZN' AND ENTRY_DATE>=TO_DATE('2010-07-22','YYYY-MM-DD')
     )
有没有其他的写法比上面的语句查询速度更快?WO 主键是CCN、MAS_LOC、WO_NUM、WO_LINE

解决方案 »

  1.   

    可以删除语句中的所有dinstinct,因为union就会去重。
    SELECT CCN, MAS_LOC, WO_NUM, WO_LINE
      FROM (SELECT CCN, MAS_LOC, WO_NUM, WO_LINE
              FROM GLOVIA_PROD.WO
             WHERE CCN = 'CHCIZN' AND
                   MAS_LOC = 'ZN' AND
                   FIN_CLOSE_DATE IS NULL
            UNION
            SELECT CCN, MAS_LOC, WO_NUM, WO_LINE
              FROM GLOVIA_PROD.WO_ISSUE
             WHERE CCN = 'CHCIZN' AND
                   MAS_LOC = 'ZN' AND
                   TRAN_DATE >= TO_DATE('2010-07-22', 'YYYY-MM-DD')
            UNION
            SELECT CCN, MAS_LOC, WO_NUM, WO_LINE
              FROM GLOVIA_PROD.WO_COMP
             WHERE CCN = 'CHCIZN' AND
                   MAS_LOC = 'ZN' AND
                   TRAN_DATE >= TO_DATE('2010-07-22', 'YYYY-MM-DD')
            UNION
            SELECT CCN, MAS_LOC, WO_NUM, WO_LINE
              FROM GLOVIA_PROD.C_WORTG
             WHERE CCN = 'CHCIZN' AND
                   MAS_LOC = 'ZN' AND
                   ENTRY_DATE >= TO_DATE('2010-07-22', 'YYYY-MM-DD'))
      

  2.   

    我看看了,你的子查询是UNION 4个查询结果得到的,UNION会排序后去除重复记录,换成UNION ALL,速度会快很多
      

  3.   

    Union all + distinct