Um innerhalb einer Tabelle doppelte Datensätze zu löschen oder zu finden, bedarf es nur einer SQL-Anweisung. Die Tabelle muss dafür jedoch eine Spalte (hier: id ) mit eindeutigem nummerischen Wert haben und als Primärschlüssel (PRIMARY KEY) definiert sein.
Zum Vergleichen werden alle Felder der Tabelle genutzt, Ausnahme ist hier auf jeden Fall der Primärschlüssel. Anhand des Primärschlüssels wird beim Löschen nur der Datensatz mit dem niedrigsten Wert erhalten, alle anderen doppelten Datensätze werden eliminiert.
Wenn nur doppelte Datensätze gesucht werden und nicht sofort gelöscht werden sollen, muss nur die SELECT-Anweisung ausgeführt werden.
DELETE t1
FROM tabelle1 t1
, (SELECT COUNT(*) AS anzahl
, MIN(id) AS id
, feld_1
, feld_2
, feld_3
, feld_n
FROM tabelle1
GROUP BY feld_1
, feld_2
, feld_3
, feld_n
HAVING anzahl > 1
) AS t2
WHERE t1.feld_1 = t2.feld_1
AND t1.feld_2 = t2.feld_2
AND t1.feld_3 = t2.feld_3
AND t1.feld_n = t2.feld_n
AND t1.id != t2.id