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

Löschen doppelter Zeilen aus einer Tabelle

Ja, vorausgesetzt, Sie haben ein eindeutiges ID-Feld, können Sie alle Datensätze löschen, die bis auf die ID gleich sind, aber nicht „die Mindest-ID“ für ihre Wertegruppe haben.

Beispielabfrage:

DELETE FROM Table
WHERE ID NOT IN
(
SELECT MIN(ID)
FROM Table
GROUP BY Field1, Field2, Field3, ...
)

Hinweise:

  • Ich habe "Table" und "ID" als repräsentative Namen frei gewählt
  • Die Liste der Felder ("Field1, Field2, ...") sollte alle Felder außer der ID enthalten
  • Dies kann je nach Anzahl der Felder und Zeilen eine langsame Abfrage sein, aber ich gehe davon aus, dass es im Vergleich zu Alternativen in Ordnung wäre

BEARBEITEN:Falls Sie keinen eindeutigen Index haben, empfehle ich, einfach einen automatisch inkrementellen eindeutigen Index hinzuzufügen. Hauptsächlich, weil es ein gutes Design hat, aber auch, weil es Ihnen erlaubt, die obige Abfrage auszuführen.