1

我正在尝试调整查询中包含 NOT EXISTS 子句的 SQL。我的数据库是 Netezza。我尝试用 NOT IN 替换 NOT EXISTS 并查看了查询计划。两者在执行时间上看起来相似。有人可以帮我解决这个问题吗?我正在尝试调整一些 SQL 查询。提前致谢。

 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; 
4

2 回答 2

1

您可以尝试加入:

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 可能会产生与您已有的相同的结果。

于 2012-05-03T13:57:46.017 回答
1

您可以尝试加入,但有时需要小心。如果连接键在第二个表中不是唯一的,那么您最终可能会得到多行。以下查询负责处理此问题:

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
于 2012-05-03T14:52:02.573 回答