Das folgende Beispiel löscht doppelte Zeilen in MySQL, während der Primärschlüssel oder die eindeutige Bezeichnerspalte ignoriert werden.
Das Beispiel löscht doppelte Zeilen, behält aber eine. Bei zwei identischen Zeilen wird also eine gelöscht und die andere beibehalten.
Beispieldaten
Angenommen, wir haben eine Tabelle mit den folgenden Daten:
SELECT * FROM Dogs;
Ergebnis:
+---------+-------------+------------+ | DogId | FirstName | LastName | |---------+-------------+------------| | 1 | Bark | Smith | | 2 | Bark | Smith | | 3 | Woof | Jones | | 4 | Ruff | Robinson | | 5 | Wag | Johnson | | 6 | Wag | Johnson | | 7 | Wag | Johnson | +---------+-------------+------------+
Wir können sehen, dass die ersten beiden Zeilen Duplikate und die letzten drei Zeilen Duplikate sind.
Duplikate finden
Lassen Sie uns zuerst unsere Tabelle überprüfen auswählen, um zu sehen, wie viele Zeilen Duplikate sind:
SELECT
FirstName,
LastName,
COUNT(*) AS Count
FROM Dogs
GROUP BY FirstName, LastName
HAVING COUNT(*) > 1;
Ergebnis:
+-----------+----------+-------+ | FirstName | LastName | Count | +-----------+----------+-------+ | Bark | Smith | 2 | | Wag | Johnson | 3 | +-----------+----------+-------+
Wir können sehen, dass es zwei Reihen mit Bark Smith und drei Reihen mit Wag Johnson gibt.
Wir werden die Tabelle deduplizieren, sodass sie jeweils nur eine enthält.
Löschen Sie die Duplikate
Das Ausführen des folgenden Codes dedupliziert die obige Tabelle:
DELETE d1 FROM Dogs d1
INNER JOIN Dogs d2
WHERE
d1.DogId < d2.DogId AND
d1.FirstName = d2.FirstName AND
d1.LastName = d2.LastName;
Ergebnis:
Query OK, 3 rows affected (0.00 sec)
Sehen wir uns das Ergebnis an:
SELECT * FROM Dogs;
Ergebnis:
+-------+-----------+----------+ | DogId | FirstName | LastName | +-------+-----------+----------+ | 2 | Bark | Smith | | 3 | Woof | Jones | | 4 | Ruff | Robinson | | 7 | Wag | Johnson | +-------+-----------+----------+
Wir haben doppelte Zeilen erfolgreich aus der Tabelle entfernt.