Følgende eksempel sletter duplikerede rækker i MySQL, mens primærnøglen eller den unikke identifikatorkolonne ignoreres.
Eksemplet sletter duplikerede rækker, men beholder én. Så i tilfælde af to identiske rækker, sletter den en af dem og beholder den anden.
Eksempel på data
Antag, at vi har en tabel med følgende data:
SELECT * FROM Dogs;
Resultat:
+---------+-------------+------------+ | DogId | FirstName | LastName | |---------+-------------+------------| | 1 | Bark | Smith | | 2 | Bark | Smith | | 3 | Woof | Jones | | 4 | Ruff | Robinson | | 5 | Wag | Johnson | | 6 | Wag | Johnson | | 7 | Wag | Johnson | +---------+-------------+------------+
Vi kan se, at de første to rækker er dubletter, og de sidste tre rækker er dubletter.
Find dubletterne
Lad os først vælge, tjek vores tabel for at se, hvor mange rækker der er dubletter:
SELECT
FirstName,
LastName,
COUNT(*) AS Count
FROM Dogs
GROUP BY FirstName, LastName
HAVING COUNT(*) > 1;
Resultat:
+-----------+----------+-------+ | FirstName | LastName | Count | +-----------+----------+-------+ | Bark | Smith | 2 | | Wag | Johnson | 3 | +-----------+----------+-------+
Vi kan se, at der er to rækker med Bark Smith, og tre rækker med Wag Johnson.
Vi vil dedupere tabellen, så den kun indeholder en af hver.
Slet dubletterne
Kørsel af følgende kode de-dupes ovenstående tabel:
DELETE d1 FROM Dogs d1
INNER JOIN Dogs d2
WHERE
d1.DogId < d2.DogId AND
d1.FirstName = d2.FirstName AND
d1.LastName = d2.LastName;
Resultat:
Query OK, 3 rows affected (0.00 sec)
Lad os se resultatet:
SELECT * FROM Dogs;
Resultat:
+-------+-----------+----------+ | DogId | FirstName | LastName | +-------+-----------+----------+ | 2 | Bark | Smith | | 3 | Woof | Jones | | 4 | Ruff | Robinson | | 7 | Wag | Johnson | +-------+-----------+----------+
Vi har fjernet duplikerede rækker fra tabellen.