2012-05-03 49 views
1

我想調整查詢中有NOT EXISTS子句的SQL。我的數據庫是Netezza.I嘗試用NOT IN替換NOT EXISTS,並查看了查詢計劃。兩個都在尋找類似於執行時間。有人可以幫我解決這個問題嗎?我試圖調整一些SQL查詢。提前感謝。調整SQL查詢中NOT EXISTS的最佳方式

SELECT ETL_PRCS_DT, COUNT (*) TOTAL_PRGM_HOLD_DUE_TO_STATION 
      FROM DEV_AM_EDS_1..AM_HOLD_TV_PROGRAM_INSTANCE D1 
      WHERE NOT EXISTS (
          SELECT * 
           FROM DEV_AM_EDS_1..AM_STATION 
           WHERE D1.STN_ID = STN_ID 
          ) 
GROUP BY ETL_PRCS_DT; 
+0

交一些代碼或數據 –

+1

有一個'GROUP BY ETL_PRCS_DT'在查詢失蹤,是不是? –

回答

1

您可以嘗試使用JOIN:

SELECT ETL_PRCS_DT, COUNT (*) TOTAL_PRGM_HOLD_DUE_TO_STATION 
FROM DEV_AM_EDS_1..AM_HOLD_TV_PROGRAM_INSTANCE D1 
LEFT JOIN DEV_AM_EDS_1..AM_STATION TAB2 ON D1.STN_ID = TAB2.STN_ID 
WHERE TAB2.STN_ID IS NULL 

嘗試比較的執行計劃。 JOIN可能會產生與您已有的相同的效果。

+0

添加了查詢... – Teja

+0

@Vutukuri我添加了一個示例 – Kai

0

您可以嘗試加入,但您有時需要小心。如果連接鍵在第二個表中不唯一,那麼最終可能會有多行。下面的查詢需要照顧這樣的:

SELECT ETL_PRCS_DT, 
    COUNT (*) TOTAL_PRGM_HOLD_DUE_TO_STATION 
FROM DEV_AM_EDS_1..AM_HOLD_TV_PROGRAM_INSTANCE D1 
left outer join 
(
    select distinct STN_ID 
    from DEV_AM_EDS_1..AM_STATION ams 
) ams 
    on d1.STN_ID = ams.STN_ID 
WHERE ams.STN_ID is NULL