Alcuni di questi approcci sembrano un po' complicati e generalmente lo faccio come:
Data tabella table
, vuoi unirlo su (campo1, campo2) mantenendo la riga con il massimo campo3:
DELETE FROM table USING table alias
WHERE table.field1 = alias.field1 AND table.field2 = alias.field2 AND
table.max_field < alias.max_field
Ad esempio, ho una tabella, user_accounts
e voglio aggiungere un vincolo univoco all'e-mail, ma ho alcuni duplicati. Dì anche che voglio mantenere quello creato più di recente (id massimo tra i duplicati).
DELETE FROM user_accounts USING user_accounts ua2
WHERE user_accounts.email = ua2.email AND user_account.id < ua2.id;
- Nota -
USING
non è SQL standard, è un'estensione PostgreSQL (ma molto utile), ma la domanda originale menziona specificamente PostgreSQL.