Sommige van deze benaderingen lijken een beetje ingewikkeld, en ik doe dit over het algemeen als:
Gegeven tabel table
, wil het uniek maken op (field1, field2) en de rij met max field3 behouden:
DELETE FROM table USING table alias
WHERE table.field1 = alias.field1 AND table.field2 = alias.field2 AND
table.max_field < alias.max_field
Ik heb bijvoorbeeld een tabel, user_accounts
, en ik wil een unieke beperking voor e-mail toevoegen, maar ik heb enkele duplicaten. Zeg ook dat ik de meest recent gemaakte wil behouden (max. id onder duplicaten).
DELETE FROM user_accounts USING user_accounts ua2
WHERE user_accounts.email = ua2.email AND user_account.id < ua2.id;
- Opmerking -
USING
is geen standaard SQL, het is een PostgreSQL-extensie (maar wel een zeer bruikbare), maar de oorspronkelijke vraag vermeldt specifiek PostgreSQL.