Certaines de ces approches semblent un peu compliquées, et je le fais généralement comme :
Table donnée table
, voulez l'unique sur (champ1, champ2) en gardant la ligne avec le maximum champ3 :
DELETE FROM table USING table alias
WHERE table.field1 = alias.field1 AND table.field2 = alias.field2 AND
table.max_field < alias.max_field
Par exemple, j'ai une table, user_accounts
, et je souhaite ajouter une contrainte unique sur le courrier électronique, mais j'ai des doublons. Dites également que je souhaite conserver le dernier créé (identifiant max parmi les doublons).
DELETE FROM user_accounts USING user_accounts ua2
WHERE user_accounts.email = ua2.email AND user_account.id < ua2.id;
- Remarque -
USING
n'est pas SQL standard, c'est une extension PostgreSQL (mais très utile), mais la question d'origine mentionne spécifiquement PostgreSQL.