PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie lösche ich doppelte Einträge?

Einige dieser Ansätze scheinen ein wenig kompliziert zu sein, und ich mache das im Allgemeinen so:

Gegebene Tabelle table , möchten es auf (Feld1, Feld2) eindeutig machen und die Zeile mit dem maximalen Feld3 beibehalten:

DELETE FROM table USING table alias 
  WHERE table.field1 = alias.field1 AND table.field2 = alias.field2 AND
    table.max_field < alias.max_field

Zum Beispiel habe ich eine Tabelle, user_accounts , und ich möchte eine eindeutige Einschränkung für E-Mails hinzufügen, aber ich habe einige Duplikate. Sagen Sie auch, dass ich die zuletzt erstellte behalten möchte (maximale ID unter den Duplikaten).

DELETE FROM user_accounts USING user_accounts ua2
  WHERE user_accounts.email = ua2.email AND user_account.id < ua2.id;
  • Hinweis - USING ist kein Standard-SQL, es ist eine PostgreSQL-Erweiterung (aber eine sehr nützliche), aber die ursprüngliche Frage erwähnt ausdrücklich PostgreSQL.