Vissa av dessa tillvägagångssätt verkar lite komplicerade, och jag brukar göra det som:
Given tabell table
, vill unika den på (fält1, fält2) och behålla raden med maxfält3:
DELETE FROM table USING table alias
WHERE table.field1 = alias.field1 AND table.field2 = alias.field2 AND
table.max_field < alias.max_field
Till exempel har jag en tabell, user_accounts
, och jag vill lägga till en unik begränsning för e-post, men jag har några dubbletter. Säg också att jag vill behålla den senast skapade (max id bland dubbletter).
DELETE FROM user_accounts USING user_accounts ua2
WHERE user_accounts.email = ua2.email AND user_account.id < ua2.id;
- Obs -
USING
är inte standard SQL, det är en PostgreSQL-tillägg (men en mycket användbar sådan), men den ursprungliga frågan nämner specifikt PostgreSQL.