sql >> Base de Datos >  >> RDS >> Mysql

Eliminar filas duplicadas en MySQL (ignora la clave principal)

El siguiente ejemplo elimina filas duplicadas en MySQL mientras ignora la clave principal o la columna de identificador único.

El ejemplo elimina filas duplicadas pero mantiene una. Entonces, en el caso de dos filas idénticas, elimina una de ellas y mantiene la otra.

Datos de muestra

Supongamos que tenemos una tabla con los siguientes datos:

SELECT * FROM Dogs;

Resultado:

+---------+-------------+------------+
| DogId   | FirstName   | LastName   |
|---------+-------------+------------|
| 1       | Bark        | Smith      |
| 2       | Bark        | Smith      |
| 3       | Woof        | Jones      |
| 4       | Ruff        | Robinson   |
| 5       | Wag         | Johnson    |
| 6       | Wag         | Johnson    |
| 7       | Wag         | Johnson    |
+---------+-------------+------------+

Podemos ver que las dos primeras filas son duplicados y las últimas tres filas son duplicados.

Encuentra los duplicados

Primero, seleccionemos revisar nuestra tabla para ver cuántas filas están duplicadas:

SELECT 
    FirstName, 
    LastName, 
    COUNT(*) AS Count
FROM Dogs
GROUP BY FirstName, LastName
HAVING COUNT(*) > 1;

Resultado:

+-----------+----------+-------+
| FirstName | LastName | Count |
+-----------+----------+-------+
| Bark      | Smith    |     2 |
| Wag       | Johnson  |     3 |
+-----------+----------+-------+

Podemos ver que hay dos filas con Bark Smith y tres filas con Wag Johnson.

Desduplicaremos la tabla para que contenga solo uno de cada uno.

Eliminar los duplicados

Ejecutar el siguiente código elimina los duplicados de la tabla anterior:

DELETE d1 FROM Dogs d1
INNER JOIN Dogs d2
WHERE
    d1.DogId < d2.DogId AND
    d1.FirstName = d2.FirstName AND
    d1.LastName = d2.LastName;

Resultado:

Query OK, 3 rows affected (0.00 sec)

Veamos el resultado:

SELECT * FROM Dogs;

Resultado:

+-------+-----------+----------+
| DogId | FirstName | LastName |
+-------+-----------+----------+
|     2 | Bark      | Smith    |
|     3 | Woof      | Jones    |
|     4 | Ruff      | Robinson |
|     7 | Wag       | Johnson  |
+-------+-----------+----------+

Hemos eliminado con éxito las filas duplicadas de la tabla.