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.