Některé z těchto přístupů se zdají trochu komplikované a já to obecně dělám takto:
Daná tabulka table
, chcete, aby byl jedinečný pro (pole1, pole2) a ponechte řádek s maximální hodnotou pole3:
DELETE FROM table USING table alias
WHERE table.field1 = alias.field1 AND table.field2 = alias.field2 AND
table.max_field < alias.max_field
Mám například tabulku user_accounts
a chci přidat jedinečné omezení na e-mail, ale mám nějaké duplikáty. Řekněte také, že si chci ponechat poslední vytvořený (maximální ID mezi duplikáty).
DELETE FROM user_accounts USING user_accounts ua2
WHERE user_accounts.email = ua2.email AND user_account.id < ua2.id;
- Poznámka –
USING
není standardní SQL, je to rozšíření PostgreSQL (ale velmi užitečné), ale původní otázka konkrétně zmiňuje PostgreSQL.