Doppelte Datensätze löschen

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

Aktualisiert am

Abgelegt unter: MySQL