[SQL] Eliminar entradas duplicadas dejando una de muestra

limpiar contenido base de datosEn un proyecto con WordPress como CMS y MySQL como base de datos en el que he estado trabajando se me planteó la necesidad de eliminar los post duplicados fruto de las distintas pruebas pero dejando uno de ellos de modo que no se perdiera todo el trabajo realizado (y evitar tener que volver a cargar la BD con datos de prueba ;))

Para aquellos que necesiten eliminar las filas repetidas de una base de datos les dejo un par de sentencias SQL con la solución adoptada.


Sea la tabla PRUEBA con las columnas IDTITULO (campo que contiene valores duplicados) y los siguientes datos de prueba

insertar datos prueba en mysql

en los que se observan títulos duplicados a eliminar

Dejar la entrada más antigua

Si queremos eliminar todas las entradas duplicadas dejando la primera aparición (la más vieja, la que tiene menor ID) lanzaremos la siguiente sentencia SQL

DELETE n1
FROM prueba n1, prueba n2
WHERE n1.titulo = n2.titulo
AND n1.id > n2.id;

Si quieres probar la consulta SQL aquí puedes hacerlo (gracias SqlFiddle).

Dejar la última aparición

Si queremos eliminar todas las entradas duplicadas menos la más reciente (la más nueva, la que tiene mayor ID) lanzaremos la siguiente consulta SQL

DELETE n1
FROM prueba n1, prueba n2
WHERE n1.titulo = n2.titulo
AND n1.id < n2.id;

NOTA: Observa que el único cambio ha sido n1.id < n2.id en lugar de n1.id > n2.id

Puedes probar aquí la solución.

Conclusión

Pequeña chuleta para cuando se necesita eliminar todas las entradas repetidas en una tabla de la base de datos dejando alguna de las filas repetidas como muestra.

Espero que os sea de utilidad si os veis en la necesidad 😉

18 comentarios en “[SQL] Eliminar entradas duplicadas dejando una de muestra

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s