In het volgende voorbeeld worden dubbele rijen in MySQL verwijderd terwijl de primaire sleutel of kolom met unieke identifiers wordt genegeerd.
Het voorbeeld verwijdert dubbele rijen, maar behoudt er één. Dus in het geval van twee identieke rijen, verwijdert het een ervan en behoudt het de andere.
Voorbeeldgegevens
Stel dat we een tabel hebben met de volgende gegevens:
SELECT * FROM Dogs;
Resultaat:
+---------+-------------+------------+ | DogId | FirstName | LastName | |---------+-------------+------------| | 1 | Bark | Smith | | 2 | Bark | Smith | | 3 | Woof | Jones | | 4 | Ruff | Robinson | | 5 | Wag | Johnson | | 6 | Wag | Johnson | | 7 | Wag | Johnson | +---------+-------------+------------+
We kunnen zien dat de eerste twee rijen duplicaten zijn en de laatste drie rijen duplicaten.
Vind de duplicaten
Laten we eerst onze tabel controleren om te zien hoeveel rijen duplicaten zijn:
SELECT
FirstName,
LastName,
COUNT(*) AS Count
FROM Dogs
GROUP BY FirstName, LastName
HAVING COUNT(*) > 1;
Resultaat:
+-----------+----------+-------+ | FirstName | LastName | Count | +-----------+----------+-------+ | Bark | Smith | 2 | | Wag | Johnson | 3 | +-----------+----------+-------+
We kunnen zien dat er twee rijen zijn met Bark Smith en drie rijen met Wag Johnson.
We zullen de tabel ontdubbelen zodat deze slechts één van elk bevat.
Verwijder de duplicaten
Als u de volgende code uitvoert, wordt de bovenstaande tabel ontdubbeld:
DELETE d1 FROM Dogs d1
INNER JOIN Dogs d2
WHERE
d1.DogId < d2.DogId AND
d1.FirstName = d2.FirstName AND
d1.LastName = d2.LastName;
Resultaat:
Query OK, 3 rows affected (0.00 sec)
Laten we het resultaat bekijken:
SELECT * FROM Dogs;
Resultaat:
+-------+-----------+----------+ | DogId | FirstName | LastName | +-------+-----------+----------+ | 2 | Bark | Smith | | 3 | Woof | Jones | | 4 | Ruff | Robinson | | 7 | Wag | Johnson | +-------+-----------+----------+
We hebben met succes dubbele rijen uit de tabel verwijderd.