Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Doppelte Zeilen in MySQL löschen (Primärschlüssel ignorieren)

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.