dedlfix: Doppelte, dreifache Einträge löschen

Beitrag lesen

Tach!

Übrigens, die erste Lösung, die du fandest, war von jemandem, der nicht gerade für fachliche Kompetenz bekannt war. Jedenfalls, wenn beim Abfragen mit DISTINCT auch die (eindeutige) ID in der Ergebnismenge ist, dann können keine doppelten Datensätze gefunden werden.
Sein Ausgangsposting beschrieb eindeutig, dass die Tabelle nur 2 Spalten hat, ohne ID oder sonstiges eindeutiges Merkmal; dort wäre die DISTINCT-Methode möglich gewesen.

Da hast du Recht. Dass da kein Index in seiner ursprünglichen Tabelle war, hatte ich nicht richtig mitbekommen. Das ist vermutlich ein weniger häufig vorkommender Fall. Da hilft meines Erachtens nur deine Variante mit dem temporären Erzeugen einer DISTINCT-Tabelle. Also zumindest wenn es effizient gehen soll. Da man keinen richtigen Anfasser (eine ID) hat, kann man einen doppelten Datensatz nur löschen, indem man einzeln alle Feldinhalte in die WHERE-Klausel schreibt und mit LIMIT 1 den Löschvorgang einschränkt (oder TOP 1 bei MS-SQL). Und das wird dann aufwendig wegen der vielen Einzel-Statements.

Dann war die Frage ja nach der allgemeinen Vorgehensweise, und da ist wohl eher üblich, eine Tabelle mit Primärschlüssel zu haben. Man muss da in irgendeiner Weise die IDs der überflüssigen Datensätze ermitteln, die man dann dem DELETE zum Fraß vorwerfen kann. Mit DISTINCT (wie im gezeigten Code des Archivpostings) kann man da nicht arbeiten, weil man so nicht die Dopplungen zusammenfassen kann, ohne die ID unberücksichtigt zu lassen. Aber man kann GROUP BY und MIN(id) oder MAX(id) nehmen - wenn man numerische IDs hat. Hat man Datensätze mehr als doppelt, muss man das Löschen solange wiederholen, bis keine Datensätze mehr gelöscht werden konnten.

dedlfix.