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.
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:
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.