marderh.blog

21/6/2007

MySQL – Doppelte Einträge finden und entfernen

Filed under: — stefan @ 13:33

Weils einfach immer wieder nötig ist sich mit den leidigen Daten auseinanderzusetzen…
Zum finden von Dupletten:

SELECT Table.key FROM Table
INNER JOIN Table AS Table2 ON
(Table2.Value1 = Table.Value1
AND Table2.Value2 = Table.Value2
AND ...)
WHERE Table2.key > Table.key

Vorausgesetzt wird in dem Fall natürlich ein numerischer Schlüssel (key), der raufzählt. Löschen geht dann folgendermassen:


DELETE Table.* FROM Table
INNER JOIN Table AS Table2 ON
(Table2.Value1 = Table.Value1
AND Table2.Value2 = Table.Value2
AND ...)
WHERE Table2.key > Table.key

Eine andere Variante, die gleichzeitig die zukünftige Eingabe von Dupletten verhindert funktioniert mit einem UNIQUE Index:

ALTER IGNORE TABLE Table ADD UNIQUE INDEX(Value1,Value2,...);

Ohne der Verwendung von IGNORE lässt sich der Index nicht erstellen, sofern doppelte Einträge vorhanden sind. Aus der MySQL – Doku geht auch nicht ganz eindeutig hervor welche der Dupletten dabei gelöscht werden, sprich in welcher Reihenfolge. Alles in allem aber immer wieder nützlich.

Powered by WordPress