Linwind

Eliminar registros duplicados en Mysql

Es un problema que nos encontramos muchas veces cuando no tenemos ningún control de contenido duplicado, ¿Como podemos eliminar esos registros de forma sencilla?

Lo primero que tenemos que hacer copiar en una nueva tabla solo los contenidos que no están duplicados, para ello tenemos usar GROUP BY de la siguiente manera:

  • CREATE TABLE tabla_temporal AS SELECT * FROM tabla GROUP BY (Columna_contenido_duplicado);

Una vez hecho esto ya tendremos en la tabla tabla_temporal todo el contenido de tabla sin contenido duplicado en la Columna Columna_contenido_duplicado. Lo siguiente que tenemos que hacer es eliminar la tabla que usamos y renombrar la que acabamos de crear con el nombre de esta:

  • DROP TABLE tabla;
  • RENAME TABLE tabla_temporal TO tabla;

Ahora ya tendrás la base de datos con la Columna Columna_contenido_duplicado sin contenido duplicado, para evitar que vuelva a suceder puedes poner una restricción a esa columna puedes ponerla como PRIMARY KEY o UNIQUE

Publicado el 1 de mayo, 2009

¿Cómo eliminar archivos duplicados en Windows?
Publicado el 14 Feb 2013

Cursos de PHP y MySQL gratis
Publicado el 19 Feb 2010

Beta de MySQL 5.5
Publicado el 15 Abr 2010

Adminer – Pequeño panel de control para MySQL.
Publicado el 22 Ago 2009

7 Comentarios

  1. ElditaSonoqui dice:

    excelente, me has salvado la vida!, muy buena aportacion.. 1000 gracias

  2. RUBENCHO dice:

    La verdad que de todas las opciones que he mirado, la tuya es la mas sencilla, rapida y completa.

    Solucionaste mi problema, muchisimas gracias!

  3. Juan Carlos dice:

    Otra forma sin drop table o eliminar tablas.

    Antes de nada efectuar un respaldo de DB y mantenerla en lugar seguro y localizada.
    Accedemos a la base de datos, seleccionamos DB y efectuamos respaldo con exportar (pestaña superior) elegimos todas las tablas y procedemos, ya tenemos un respaldo de la DB actualizado que no está nunca de más.
    PASOS PARA ELIMINAR CONTENIDO DUPLICADO EN MYSQL
    Ahora que ya tenemos el respaldo ya se pueden fiar más de lo que vamos a hacer.
    Seguimos en la DB, esta vez punteamos el comando SQL ventana superior y por este orden ejecutamos las siguientes consultas en la ventana editora de texto:
    1.
    CREATE TABLE `pon el nombre de tu tabla aquí_new` as
    SELECT * FROM `pon el nombre de tu tabla aquí` WHERE 1 GROUP BY `title`;
    2.
    RENAME TABLE tu_tabla TO tu_tabla_bak;
    3.
    RENAME TABLE tu_tabla_new TO tu_tabla;

    No olvides continuar en cada paso (bajo editor derecha)

    Explicación comandos: con el paso 1 creamos una nueva tabla desde la tabla que contiene el contenido, para aquellos que no sepan su nombre lo normal es que sea la que más pesa, con _new diferenciamos la original de la nueva o si lo prefieres pon _prohibido_fumar jeje.
    Copia y pega tal cual las dos lineas con el nombre de tu tabla. La segunda linea no marca la fuente, osea la tabla original a copiar, lo que le decimos con WHERE… es que ordene la nueva tabla por título eliminándose los registros duplicados, se puede hacer sustituyendo title por cualquier otra función del Order By (id,alias,fulltext….) ver tuto mysql.

    Con el paso 2 hacemos un nuevo respaldo a la tabla original, por si acaso no nos gusta el resultado y así basta con volver a renombrar a la inversa para recuperar la tabla original y de paso evitamos conflictos del mismo nombre.

    Con el paso tres copias la nueva tabla a tu tabla original y listo, espero que les sirva si tienen gran cantidad de artículos, para poco contenido no merece la pena.
    Un saludo de Juan Carlos.

  4. Curda dice:

    Si pero tienes una alternativa mucho mas fácil

    ALTER IGNORE TABLE tabla ADD UNIQUE INDEX(campo);
    esto te borra todos los registros duplicados

    y si no queres que sea obligatoria cambias ejecutas esto
    ALTER TABLE tabla DROP INDEX `campo`;

    🙂

  5. Javier dice:

    Hola…

    Funcionó de maravilla… Muchas gracias…

    Ahora te pregunto….

    Puedo hacer un script con las 3 instrucciones para que se ejecuten una tras otra automaticamente con phpmyadmin, ya se los nombres de las tablas, simpre son las mismas (lo he hecho una a una con phpmyadmin)….

    Es para eliminar post duplicados en wordpress de varios blogs..

    Gracias

  6. anonimo dice:

    ALTER IGNORE TABLE tabla ADD UNIQUE INDEX(campo);
    esta sentencia siempre arroja un error y no soluciona nada mejor es la primera que explicaste

  7. yordi dice:

    Si pero por ejemplo ustedes explican lo mismo de siempre pero no dicen, po rejemplo, en campo que lleve text no podras poner indixes por que mysql no lo permite y hablo de campos donde son mas usados como para meter redacciones o descripciones largas de un articulo.

    lo mejor y mas viable es usar esta sentencia
    DELETE FROM mitabla
    WHERE campoid NOT IN (SELECT *
    FROM (SELECT MIN(n.campoid)
    FROM mitabla n
    GROUP BY n.micampo) x)

Dejar un comentario


Actualidad Windows Linux Juegos Redes Sociales Utilidades Telefonía Movil Micropost