Eliminación de registros duplicados en Oracle

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.