Eliminar registros con clave duplicada de un archivo utilizando SQL.
DELETE FROM LIBRERIA1/ARCHIVO1 where RRN(F1) > (Select MIN(RRN(F2)) From LIBRERIA1/ARCHIVO1 F2 WHERE F2.CLAVE = F1.CLAVE)
Debe leerse el comando de derecha a izquierda como las escrituras árabes. En este caso comenzando con el Select.
Este comando trabaja con el Record Number (Número de registro físico) con el que trabaja el Iseries al grabar los registros en un archivo. La palabra clave es: RRN.
El comando selecciona el menor record Number entre registros del mismo archivo con claves coincidentes. F1 y F2 son artificios usados por Sql para identificar rapidamente un archivo de otro archivo. El resultado de un select es una tabla interna subconjunto del archivo original, cuyos registros coinciden con F1 (que tambien es el archivo original) pero seleccionando el registro con menor Record Number. Seguidamente, el comando procede a eliminar (DELETE) del archivo original el registro duplicado con mayor Record Number.
Si te pareció interesante, reenvialo a un amigo haciendo click en el sobrecito que está al final del artículo. El conocimiento es valioso, compártelo.
Autor: Ing. Liliana Suárez
2 comments:
No estoy muy seguro que tu código requiere ejecutar varias veces la sentencia para borrar regitros que estén repetidos más de dos veces. En mi caso, yo por lo general lo que hago es una vista, a fin de poder revisar la data primero, y después borro los registros de esa vista. Por ejemplo:
CREATE VIEW libname.viewdup AS
WITH T1 AS(
SELECT A.*, RRN(A) AS RRNO FROM lib.file A
)
SELECT * FROM T1 A WHERE EXISTS(
SELECT 1 FROM T1 B
WHERE A.CLAVE = B.CLAVE AND A.RRNO > B.RRNO );
Puedes hacer un "SELECT * FROM libname.viewdup" para revisar y, si estás de acuerdo con la selección, "DELETE FROM libname.viewdup"
Saludos,
Luis Rodriguez
Excelente tu aporte Luis, Muchas gracias,
Liliana
Post a Comment