Nogle af disse tilgange virker lidt komplicerede, og jeg gør det generelt som:
Givet tabel table
, ønsker at unikke den på (felt1, felt2) ved at beholde rækken med maks. felt3:
DELETE FROM table USING table alias
WHERE table.field1 = alias.field1 AND table.field2 = alias.field2 AND
table.max_field < alias.max_field
For eksempel har jeg en tabel, user_accounts
, og jeg vil tilføje en unik begrænsning på e-mail, men jeg har nogle dubletter. Sig også, at jeg vil beholde den senest oprettede (maks. id blandt dubletter).
DELETE FROM user_accounts USING user_accounts ua2
WHERE user_accounts.email = ua2.email AND user_account.id < ua2.id;
- Bemærk -
USING
er ikke standard SQL, det er en PostgreSQL-udvidelse (men en meget nyttig), men det originale spørgsmål nævner specifikt PostgreSQL.