Thomas Bandt

Über mich | Kontakt | Archiv

SQL - Duplikate finden und löschen

Es kommt vor, dass man in einer Datenbank-Tabelle mehrere Datensätze mit dem gleichen Inhalt hat und diese finden möchte:

SELECT Email, FKMarketID, FKLanguageID, Count(*) FROM NewsletterSubscriptions
GROUP BY Email, FKMarketID, FKLanguageID HAVING COUNT(*) > 1

Die Kriterien für die Eindeutigkeit sind hier die Felder Email, FKMarketID und FKLanguageID.

Will man sie jetzt noch löschen, kann man folgendes Statement benutzen:

DELETE FROM NewsletterSubscriptions WHERE SubscriptionID IN
(
SELECT T1.SubscriptionID FROM NewsletterSubscriptions T1, NewsletterSubscriptions T2
WHERE T1.Email = T2.Email and T1.FKMarketID = T2.FKMarketID AND T1.FKLanguageID = T2.FKLanguageID AND T1.SubscriptionID > T2.SubscriptionID
)

Kommentare

  1. Martin Brunner schrieb am Donnerstag, 21. Oktober 2010 16:22:00 Uhr:

    Danke.
    (war in google der 9. Treffer mit "sql duplikate finden")
  2. Carsten Schildmeyer schrieb am Freitag, 14. Februar 2014 13:57:00 Uhr:

    Einfache Lösung eines Standard Problems - brilliant.
    Wenn statt SubscriptionID der Timestamp verwendet wird,
    bleibt nur der Satz erhalten, der als erstes in die Tabelle
    geschrieben wurde.

    Erstaunlich, was man sonst im Web zu diesem Thema findet.
    Gurus, die den Einsatz von temporären Tabellen zum Dogma erklären, usw.


« Zurück  |  Weiter »