Niektóre z tych podejść wydają się nieco skomplikowane i zazwyczaj robię to jako:
Dana tabela table
, chcesz go niepowtarzalny na (pole1, pole2) zachowując wiersz z max pole3:
DELETE FROM table USING table alias
WHERE table.field1 = alias.field1 AND table.field2 = alias.field2 AND
table.max_field < alias.max_field
Na przykład mam tabelę user_accounts
i chcę dodać ograniczenie unikatowe do poczty e-mail, ale mam kilka duplikatów. Powiedz również, że chcę zachować ostatnio utworzony (maksymalny identyfikator wśród duplikatów).
DELETE FROM user_accounts USING user_accounts ua2
WHERE user_accounts.email = ua2.email AND user_account.id < ua2.id;
- Uwaga —
USING
nie jest standardowym SQL, jest rozszerzeniem PostgreSQL (ale bardzo użytecznym), ale oryginalne pytanie dotyczy wyraźnie PostgreSQL.