Eliminación de registros duplicados en Oracle
Ejemplo de eliminación sencilla de registros duplicados en una tabla Oracle:
Creamos una tabla:
SQL> create table tabla (ID number, columna1 varchar2(20), columna2 varchar2(20));
# Hacemos algunos insert en la tabla:
SQL> insert into tabla values (1, 'primero', 'primero'); SQL> insert into tabla values (2, 'segundo', 'primero'); SQL> insert into tabla values (3, 'tercero', 'primero'); SQL> commit;
# Duplicamos un registro:
SQL> insert into tabla values (4, 'primero', 'primero'); SQL> commit;
# Borrar repetidos teniendo clave
DELETE FROM tabla
WHERE ID not in
(SELECT MIN(ID)
FROM tabla
GROUP BY columna1, columna2);
# Borrar repetidos sin tener clave
DELETE FROM tabla
WHERE rowid not in
(SELECT MIN(rowid)
FROM tabla
GROUP BY columna1, columna2);
# Otra alternativa podría ser, aunque esta borraría sólo un regitro. Habría, que tener cuidado si hay más de un duplicado. Es algo más eficiente:
DELETE FROM tabla
WHERE rowid in
(SELECT MIN(rowid)
FROM tabla a
GROUP BY a.ID_OBRA, a.CENT_ID_CENT_EQUIPO
HAVING count(*) > 1);
# Por último, para comprobar los duplicado podríamos lanzar la siguiente sentencia:
SQL> SELECT columna1, columna2, count(*)
FROM tabla
GROUP BY columna1, columna2
HAVING count (*) > 1;
Comments are closed.

