Някои от тези подходи изглеждат малко сложни и обикновено правя това като:
Дадена таблица table
, искате да го уникнете на (поле1, поле2), като запазите реда с максимално поле3:
DELETE FROM table USING table alias
WHERE table.field1 = alias.field1 AND table.field2 = alias.field2 AND
table.max_field < alias.max_field
Например, имам таблица user_accounts
, и искам да добавя уникално ограничение за имейл, но имам някои дубликати. Кажете също, че искам да запазя най-скоро създадения (максимален идентификатор сред дубликатите).
DELETE FROM user_accounts USING user_accounts ua2
WHERE user_accounts.email = ua2.email AND user_account.id < ua2.id;
- Забележка –
USING
не е стандартен SQL, това е разширение на PostgreSQL (но много полезно), но в оригиналния въпрос специално се споменава PostgreSQL.