Algunos de estos enfoques parecen un poco complicados y generalmente hago esto como:
Tabla dada table
, quiero hacerlo único en (campo1, campo2) manteniendo la fila con el máximo campo3:
DELETE FROM table USING table alias
WHERE table.field1 = alias.field1 AND table.field2 = alias.field2 AND
table.max_field < alias.max_field
Por ejemplo, tengo una tabla, user_accounts
y quiero agregar una restricción única en el correo electrónico, pero tengo algunos duplicados. Diga también que quiero mantener el creado más recientemente (id máximo entre duplicados).
DELETE FROM user_accounts USING user_accounts ua2
WHERE user_accounts.email = ua2.email AND user_account.id < ua2.id;
- Nota:
USING
no es SQL estándar, es una extensión de PostgreSQL (pero muy útil), pero la pregunta original menciona específicamente a PostgreSQL.