Mysql
 sql >> Database >  >> RDS >> Mysql

Elimina le righe duplicate in MySQL (ignora la chiave primaria)

L'esempio seguente elimina le righe duplicate in MySQL ignorando la chiave primaria o la colonna dell'identificatore univoco.

L'esempio elimina le righe duplicate ma ne conserva una. Quindi, nel caso di due righe identiche, ne cancella una e conserva l'altra.

Dati di esempio

Supponiamo di avere una tabella con i seguenti dati:

SELECT * FROM Dogs;

Risultato:

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

Possiamo vedere che le prime due righe sono duplicate e le ultime tre righe sono duplicate.

Trova i duplicati

Per prima cosa, selezioniamo controlla la nostra tabella per vedere quante righe sono duplicate:

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

Risultato:

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

Possiamo vedere che ci sono due file con Bark Smith e tre file con Wag Johnson.

Deduperemo la tabella in modo che ne contenga solo una per ciascuna.

Elimina i duplicati

L'esecuzione del codice seguente deduplica la tabella precedente:

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

Risultato:

Query OK, 3 rows affected (0.00 sec)

Vediamo il risultato:

SELECT * FROM Dogs;

Risultato:

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

Abbiamo rimosso correttamente le righe duplicate dalla tabella.