Mostrar registros duplicados en una tabla MySQL

Mostrar registros duplicados en una tabla MySQL

Mostrar registros duplicados. En algunos casos es necesario sacar un reporte con datos repetidos en nuestra tabla de MySQL. Si bien, cuando los registros son pocos podemos hacer la tarea de forma manual, pero se dificulta cuando son miles de registros.

Índice

    Mostrar registros duplicados: Clave primaria

    Desde un punto de vista si hay clave primaria no debería haber duplicados, pero podemos buscar los registros cuyos campos tengan el mismo valor. Por lo tanto, sean duplicados a la hora de sacar un determinado reporte de la tabla.

    Mostrar registros duplicados en una tabla MySQL
    Mostrar registros duplicados en una tabla MySQL

    ¿Cómo darle el trabajo a nuestro computador o servidor?

    Esta tarea bien puede ser asignado a una maquina siempre y cuando le demos las instrucciones

    Para este ejemplo, usaremos una tabla llamada «países» con 3 columnas (id, codigo, nombre). Sin embargo, nuestra tarea será mostrar contenido duplicado en las columnas.

    Tabla MySQL: Países

    CREATE TABLE `paises` (
    `id` int(11) NOT NULL,
    `codigo` varchar(4) DEFAULT NULL,
    `nombre` varchar(150) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
    
    INSERT INTO `paises` (`id`, `codigo`, `nombre`) VALUES
    (1, 'UK', 'Reino Unido'),
    (2, 'CO', 'Colombia'),
    (3, 'CN', 'China'),
    (4, 'FR', 'Francia'),
    (5, 'DK', 'Dinamarca'),
    (6, 'MX', 'Mexico'),
    (7, 'CO', 'Colombia'),
    (8, 'CN', 'China'),
    (9, 'IN', 'India'),
    (10, 'FR', 'Francia');
    
    ALTER TABLE `paises`
      ADD PRIMARY KEY (`id`);
    
    ALTER TABLE `paises`
      MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=11;

    A continuación, veremos 3 formas para poder encontrar campos o registros duplicados.

    Mostrar registros duplicados: 3 formas de hacerlo

    Aquí veremos tres formas para listar registros que posean datos repetidos.

    a) Primera Forma

    Usaremos la sentencia de MySQL COUNT() para lograr nuestro objetico, además de la sentencia GROUP BY

    La consulta SQL es la siguiente:

    SELECT codigo, nombre, COUNT(*) as Total
    FROM paises 
    GROUP BY nombre HAVING COUNT(*) > 1

    En la consulta anterior nos devuelva el total de países repetidos que existe en la tabla países y el resultado es como en la siguiente imagen:

    b) Segunda Forma

    Aquí usaremos la sentencia IN dentro de la cláusula WHERE la aplicar nuestra consulta SQL
    Consulta SQL

    SELECT codigo, nombre
    FROM paises
    WHERE codigo
    IN (SELECT codigo
    FROM paises
    GROUP BY codigo
    HAVING count(codigo) >1)
    ORDER BY codigo

    Resultados luego de aplicar la consulta

    Resultados con registros duplicados usando IN
    Resultados con registros duplicados usando IN

    c) Tercera Forma

    Esta opción es muy sencilla y solo usa HAVING COUNT apoyado de la cláusula GROUP BY para mostrar registros repetidos.

    SQL del ejemplo

    SELECT codigo, nombre
    FROM paises
    GROUP BY nombre
    HAVING COUNT( * ) >1

    CONCLUSIÓN

    En este artículo hemos aprendido a buscar si dentro de una determinada tabla hay campos repetidos, y si hay contar el número total de registros duplicados.

    Haciendo consultas sencillas como GROUP BY y HAVING hemos aprendido a filtrar registros similares

    Espero que esta pequeña explicación sea de su agrado.

    Referencia

    Duplicados

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Subir