Följande exempel tar bort dubbletter av rader i MySQL samtidigt som primärnyckeln eller den unika identifierarkolumnen ignoreras.
Exemplet tar bort dubbletter av rader men behåller en. Så i fallet med två identiska rader, tar den bort en av dem och behåller den andra.
Exempeldata
Anta att vi har en tabell med följande 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 att de två första raderna är dubbletter och de sista tre raderna är dubbletter.
Hitta dubbletter
Låt oss först välja kolla vår tabell för att se hur många rader som är dubbletter:
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 att det finns två rader med Bark Smith och tre rader med Wag Johnson.
Vi kommer att dedupera tabellen så att den bara innehåller en av varje.
Ta bort dubbletterna
Att köra följande kod de-duperar tabellen ovan:
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)
Låt oss se resultatet:
SELECT * FROM Dogs;
Resultat:
+-------+-----------+----------+ | DogId | FirstName | LastName | +-------+-----------+----------+ | 2 | Bark | Smith | | 3 | Woof | Jones | | 4 | Ruff | Robinson | | 7 | Wag | Johnson | +-------+-----------+----------+
Vi har tagit bort dubbletter av rader från tabellen.