La mejor manera de ajustar NO EXISTE en consultas SQL

Estoy tratando de ajustar los SQL que tienen la cláusula NOT EXISTS en las consultas. Mi base de datos es Netezza. Intenté reemplazar NOT EXISTS con NOT IN y observé los planes de consulta. Ambos se ven similares en tiempos de ejecución. ¿Puede alguien ayudarme con esto? Estoy tratando de ajustar algunas consultas SQL. Gracias de antemano.

 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; 

preguntado el 03 de mayo de 12 a las 14:05

Hay un GROUP BY ETL_PRCS_DT falta en la consulta, ¿no? -

2 Respuestas

Puedes probar un 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

Trate de comparar los planes de ejecución. El JOIN podría producir lo mismo que ya tiene.

contestado el 03 de mayo de 12 a las 15:05

Puede probar una combinación, pero a veces debe tener cuidado. Si la clave de combinación no es única en la segunda tabla, es posible que termine con varias filas. La siguiente consulta se encarga de esto:

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

Respondido 16 Feb 13, 17:02

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.