es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Consulta para eliminar un registro cuando no hay coincidencia en la tabla delta.

Ayuda a escribir una mejor consulta de eliminación. DB2 no tiene “no coincidente por origen” con merge. Es necesario eliminar filas que no tengan códigos coincidentes con el archivo fuente para un ID y solo se deben eliminar las filas para los ID presentes en el archivo fuente.

delete from target
   where ID in (select ID from source)
         and 
      ID || Code NOT in (select S.ID || S.Code from source S)

Datos de ejemplo

target             source 
ID   code         ID   code         
1    ABC          1     ABC     
1    DEF          1     DEF
1    IJK
2    ABC
2    XYZ

La fila con un valor de ID = 1 y código = IJK debe eliminarse solo de target.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Una posible forma de mejorar la consulta de eliminación para el escenario descrito en la pregunta es utilizando una unión externa en lugar de subconsultas. Aquí tienes un ejemplo:

    DELETE FROM target
    WHERE ID IN (
      SELECT ID
      FROM source
    )
    AND NOT EXISTS (
      SELECT 1
      FROM source S
      LEFT OUTER JOIN target T
        ON S.ID = T.ID AND S.Code = T.Code
      WHERE S.ID = target.ID AND T.ID IS NULL
    )
    

    Esta consulta primero selecciona todos los IDs que están presentes en el archivo fuente. Luego, utiliza una unión externa izquierda entre las tablas source y target para verificar los IDs y códigos coincidentes. Las filas que tienen un resultado nulo de la unión (lo que significa que no tienen un código coincidente en la tabla target) se eliminan.

    El uso de una unión externa puede ser más eficiente que las subconsultas en algunos casos, especialmente al eliminar grandes cantidades de datos. Sin embargo, siempre es recomendable probar la consulta en un conjunto de datos pequeño antes de ejecutarla en un entorno de producción.

Comments are closed.