sql >> データベース >  >> RDS >> Oracle

OracleでのSQLクエリの調整

    複数のDISTINCTを実行する必要がないため、クエリを単純化することから始めます。 ■(最終出力でのみ必要)、出力していない多くの列を選択しています。また、選択していないいくつかのテーブルを結合しており、これらに一致する行が複数ある場合は、EXISTSなどを使用して重複行が生成される可能性があります。 これらの結合を排除できます。

    このように:

    WITH MARC_SEL AS (
      SELECT A.SOURCE,
             MARA.MATNR,
             MARC.WERKS
      FROM   XXX_MAIN.XXX_XSAP A
             INNER JOIN XXX_MAIN.XXX_SAP_MARA MARA
             ON (    A.MATNR = MARA.MATNR 
                 AND A.MTART = MARA.MTART )
             INNER JOIN XXX_MAIN.XXX_SAP_MARC MARC
             ON (    MARA.MATNR = MARC.MATNR )
      WHERE  EXISTS( SELECT 'X'
                     FROM   XXX_MAIN.XXX_MP_WERKS_PLANT_XREF PX
                     WHERE  PX.LEGACY_PLANT = MARC.WERKS
                     AND    PX.SOURCE = 'SP' )
      AND    EXISTS( SELECT 'X'
                     FROM   XXX_MAIN.XXX_SAP_MBEW MBEW
                     WHERE  MARC.MATNR = MBEW.MATNR
                     AND    MARC.WERKS = MBEW.BWKEY )
      AND    A.SOURCE  = 'SP'
    )
    , MVKE_SEL AS (
      SELECT  NVL(MX_VKORG.SAP_DE_VAL,'/') VKORG,
              NVL(SUBSTR(MX_VKORG.SAP_DE,6,2),'/') VTWEG,
              MX_VKORG.DESC4 
      FROM    XXX_MAIN.XXX_MP_VKVT_XREF MX_VKORG
      WHERE   EXISTS ( SELECT 'X'
                       FROM   XXX_MAIN.XXX_SAP_MVKE MVKE
                       WHERE  MX_VKORG.SOURCE_DE_VAL = MVKE.VKORG
                       AND    SUBSTR(MX_VKORG.SAP_DE,6,2) = MVKE.VTWEG )
      AND     MX_VKORG.SOURCE_TBL = 'SP'
      AND     MX_VKORG.SOURCE_DE = 'MVKE'
      AND     SUBSTR(MX_VKORG.SAP_DE,1,5)= 'VKORG'
      AND     MX_VKORG.DESC2 IS NULL
    )
    SELECT DISTINCT
           MARC.SOURCE,
           MARC.MATNR,
           MVKE.VKORG,
           MARC.WERKS,
           MVKE.VTWEG  
    FROM   MARC_SEL MARC
           INNER JOIN MVKE_SEL MVKE
           ON (    MARC.MATNR = MVKE.MATNR   
               AND MARC.WERKS = MVKE.DESC4 )
    


    1. ANDおよびORを使用したクエリで複数の行を取得する

    2. 外部キー制約の条件付きCASCADE操作?

    3. Visual Studio2012RCでOracleDataProviderfor.NETが表示されない

    4. Oracleから見た文字列の実際の長さ