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.