2016-04-06 18 views
0

LOJに結合条件がないため、製品結合を実行するクエリが1つあります。これは、データベースにはより多くの部屋を投げないです製品の結合問題の取得

SELECT DISTINCT 
1 AS ARRANGEMENT_ID 
,AR.ARRANGEMENT_TYPE_ID 
,TRIM(LEADING '0' FROM SRC.QCA_KB_ACCT_NBR) AS UNIQUE_ID_IN_SOURCE_SYSTEM 
,NULL AS AR_OPEN_DATE 
,NULL AS AR_CLOSED_DATE 
,NULL AS AR_LCS_DATE 
,-3 AS AR_LCS_TYPE_ID 
,CPT.PRODUCT_TYPE_ID 
,-3 AS SUB_PRODUCT_TYPE_ID 
,NULL AS REPRESENTING_ORG_UNIT_ID 
,-3 AS AR_BRAND_TYPE_ID 
,NULL AS INITIATING_IP_ID 
,-3 AS CLOSED_REASON_TYPE_ID 
,-3 AS GL_SBU_TYPE_ID 
,-3 AS AR_PAYMENT_TYPE_ID 
,-3 AS AR_STRUCTURE_TYPE_ID 
,SRC.EFFECTIVE_START_DATE 
,SRC.EFFECTIVE_END_DATE 
,'ZAF' 
,'40' AS FILE_ID 
,'' AS ETL_PROCESS_ID 
,CURRENT_TIMESTAMP(6) AS DW_LOAD_TIMESTAMP 
,NULL AS DW_UPD_LOAD_TIMESTAMP 
FROM Y.T_Q18000_ACCOUNT_MASTER_INT SRC 
LEFT OUTER JOIN X.ARRANGEMENT_TYPE AR 
ON AR.ARRANGEMENT_TYPE_DESC = 'Account Arrangement' 
LEFT OUTER JOIN X.COMBD_PRODUCT_TYPE CPT 
ON CPT.ORIGINAL_LOOKUP_TABLE_NAME = 'PRODUCT' 
AND CPT.PRODUCT_TYPE_CODE = 'CARD' 
AND CPT.PRODUCT_TYPE_DESC = 'Card' 
AND CPT.EFFECTIVE_END_DATE = '3499-12-31' 

:君たちは私が下記の代替を見つけることができます。

ここでインラインクエリを実行する必要があります。私は他のテーブルの結合条件を持っていません。

よろしく、 アミット

答えて

1

あなたはこのクエリが何をしたい戻りますか?

はあなたの実際CROSS JOINすべてARRANGEMENT_TYPECOMBD_PRODUCT_TYPE両方からT_Q18000_ACCOUNT_MASTER_INTへ行(およびDISTINCTが効果を治すように見えるではなく、原因)ジョイン条件行方不明に行います。

代わりDerviedテーブルに参加しよう:

FROM Y.T_Q18000_ACCOUNT_MASTER_INT SRC 
CROSS JOIN 
(
    SELECT * 
    FROM X.ARRANGEMENT_TYPE 
    WHERE ARRANGEMENT_TYPE_DESC = 'Account Arrangement' 
) AS AR 
CROSS JOIN 
(
    SELECT * 
    FROM X.COMBD_PRODUCT_TYPE 
    WHERE ORIGINAL_LOOKUP_TABLE_NAME = 'PRODUCT' 
    AND PRODUCT_TYPE_CODE = 'CARD' 
    AND PRODUCT_TYPE_DESC = 'Card' 
    AND EFFECTIVE_END_DATE = '3499-12-31' 
) AS CPT 

うまくいけば、それらの派生表は、少数の行を返す...

を、それらの選択は、実際にあなたがすることによって、それらを置き換える可能性がある単一の行を返す場合スカラー副問合せは、これは「Dispatcherがステップの取得」で両方のテーブルにアクセスする必要がありますし、任意のない単一のテーブルスキャンが加わり:

SELECT DISTINCT -- distinct probably no longer needed 
    1 AS ARRANGEMENT_ID 
    , (
     SELECT ARRANGEMENT_TYPE_ID 
     FROM X.ARRANGEMENT_TYPE 
     WHERE ARRANGEMENT_TYPE_DESC = 'Account Arrangement' 
    ) AS ARRANGEMENT_TYPE_ID 
    ,TRIM(LEADING '0' FROM SRC.QCA_KB_ACCT_NBR) AS UNIQUE_ID_IN_SOURCE_SYSTEM 
    ,NULL AS AR_OPEN_DATE 
    ,NULL AS AR_CLOSED_DATE 
    ,NULL AS AR_LCS_DATE 
    ,-3 AS AR_LCS_TYPE_ID 
    , (
     SELECT PRODUCT_TYPE_ID 
     FROM X.COMBD_PRODUCT_TYPE 
     WHERE ORIGINAL_LOOKUP_TABLE_NAME = 'PRODUCT' 
     AND PRODUCT_TYPE_CODE = 'CARD' 
     AND PRODUCT_TYPE_DESC = 'Card' 
     AND EFFECTIVE_END_DATE = '3499-12-31' 
    ) AS PRODUCT_TYPE_ID 
    ,-3 AS SUB_PRODUCT_TYPE_ID 
    ,NULL AS REPRESENTING_ORG_UNIT_ID 
    ,-3 AS AR_BRAND_TYPE_ID 
    ,NULL AS INITIATING_IP_ID 
    ,-3 AS CLOSED_REASON_TYPE_ID 
    ,-3 AS GL_SBU_TYPE_ID 
    ,-3 AS AR_PAYMENT_TYPE_ID 
    ,-3 AS AR_STRUCTURE_TYPE_ID 
    ,SRC.EFFECTIVE_START_DATE 
    ,SRC.EFFECTIVE_END_DATE 
    ,'ZAF' 
    ,'40' AS FILE_ID 
    ,'' AS ETL_PROCESS_ID 
    ,CURRENT_TIMESTAMP(6) AS DW_LOAD_TIMESTAMP 
    ,NULL AS DW_UPD_LOAD_TIMESTAMP 
FROM Y.T_Q18000_ACCOUNT_MASTER_INT AS SRC 
+0

こんにちはディーター、 はい、seconをd joinは、combd_product_typeの特定の仕様の結果が必要な場合に必要です – user3901666

+0

@ user3901666:2回目のジョインもCROSS JOINであることに気付かず、1回目のジョインのように派生テーブルに移動する必要があります。私は私の答えを編集しました。 – dnoeth

+0

こんにちはDieter、 これがどのように役立つか理解してください。計画は若干の改善を示していますが、その背後にある理由を理解できませんでした。 – user3901666

関連する問題