2016-04-06 14 views
0

Ich habe eine Abfrage, die ein Produkt Join tut, weil Join-Bedingung in der LOJ fehlt. Könnten Sie mir helfen, eine Alternative zu den folgenden zu finden:Getting Produkt beitreten Problem

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' 

Es wirft nicht mehr Platz in der Datenbank.

Sollte ich hier für Inline-Abfrage gehen. Ich habe keine Beitrittsbedingung für andere Tabelle.

Grüße, Amit

Antwort

1

Sind Sie sicher, dass diese Abfrage zurück, was Sie wollen?

der fehlenden Mitmach Bedingungen Haben Sie eigentlich CROSS JOIN alle beide Reihen von ARRANGEMENT_TYPE und COMBD_PRODUCT_TYPE-T_Q18000_ACCOUNT_MASTER_INT (und DISTINCT scheint die Wirkung, aber nicht die Ursache zu heilen).

Versuchen Sie, Dervied Tabellen verbinden statt:

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 

Hoffentlich jene abgeleitete Tabelle eine kleine Anzahl von Zeilen zurück ...

Wenn diese Wählt man sie durch eine tatsächlich eine einzelne Zeile zurückgeben ersetzen könnte Scalar Subquery, sollte diese beiden Tabellen zugreifen mit einem „Dispatcher abrufen Step“ und einer einzigen Tabelle Scan ohne beitritt:

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

Hallo Dieter, Ja, das SECON d join ist erforderlich, da wir Ergebnisse für eine bestimmte Spezifikation von combd_product_type benötigen – user3901666

+0

@ user3901666: Ich habe nicht bemerkt, dass der 2. Join auch ein 'CROSS JOIN' ist, Sie müssen ihn auch in eine Abgeleitete Tabelle wie den 1. Join verschieben, Ich habe meine Antwort bearbeitet. – dnoeth

+0

Hallo Dieter, Bitte hilf mir zu verstehen, wie das helfen wird. Der Plan zeigt einige Verbesserungen, aber ich konnte den Grund nicht verstehen. – user3901666