De vez en cuando, por ejemplo por la falta de algún índice unico, puede suceder que insertemos registros duplicados en una de nuestras tablas.
Cuando notamos esta "duplicidad" seguramente querremos borrar todos los duplicados y dejar solo 1 registro, o no?
Habitualmente tenemos inconveniente es realizar este trabajo dado que borramos todos los registros involucrados en la duplicidad.
Para solucionar esto y asi poder borrar todos los duplicados salvo 1, debemos seguir algunos pasos.
Por ejemplo, vamos a cerar la tabla DUPLICADOS la cual va a tener 2 columnas:
SQL> create table duplicados (col1 number, col2 varchar2(20))
Hacemos algunos insert en la misma:
SQL> insert into duplicados values (1, 'primero')
SQL> insert into duplicados values (2, 'segundo')
SQL> insert into duplicados values (3, 'tercero')
Provocamos la duplicación de un registro:
SQL> insert into duplicados values (1, 'primero')
SQL> commit;
Bueno, como vemos tenemos un registro duplicado el cual podemos borrar de la siguiente manera:
SQL> delete from duplicados
2 where rowid not in
3 (select min(rowid)
4 from duplicados
5 group by col1, col2);
Para entender un poco lo que acabamos de hacer debemos prestar atención en el min(rowid), el cual de las dos filas duplicadas
solo va a borrar aquella con el menor rowid. Con esto nos aseguramos de borrar solo 1 de los 2 registros.
Para comprobar que ya no tenemos duplicados en la tabla ejecutamos el siguiente SELECT
SQL> select *
2 from duplicados
3 group by col1, col2
4 having count (*) > 1;
Espero les haya servido
Saludos!
Gondalf
¿Podemos tener duplicados en una tabla?
ResponderEliminarClaro que si, siempre que no se utilice una PK o algun índice único en alguna/s columna/s.
ResponderEliminarSaludos!
muy util, muchas gracias.
ResponderEliminarGracia men!! Acabas de evitar que me despidan jaja
ResponderEliminarExcelente, fácil y útil.
ResponderEliminarMUCHAS GRACIAS!!!
ResponderEliminarGracias, buenísimo!!!
ResponderEliminarexcelente. gracias
ResponderEliminarBUEM APORTE!
ResponderEliminarexcelente gracias
ResponderEliminarGenial idea: simple, sencilla y eficaz. ¡Muchas gracias!
ResponderEliminarExcelente muchas gracias!!!
ResponderEliminarel problema cuando solo unas columnas son repetidas y otras no, ¿sirve igual esta solucion?,
ResponderEliminarquiero decir tienes una tabla con...5 columnas, insertaste sin pk, despues te das cuenta que necesitas una pk compuesta por dos columnas, y no existe unicidad en tu tabla para esas dos columnas, como borras las repetidas?
Y Si tenemos mas de un duplicado?
ResponderEliminarY Si tenemos mas de un duplicado?
ResponderEliminarFabio, te borra todos los registros menos las que tienen el mímino Roiwd, da igual si se repite una o 100 veces.
Eliminarel ROWID es único para cada fila insertada esto jamas funcionara....
ResponderEliminar