PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como excluir entradas duplicadas?


Algumas dessas abordagens parecem um pouco complicadas, e geralmente faço isso como:

Dada a tabela table , deseja excluí-lo em (campo1, campo2) mantendo a linha com o campo máximo3:
DELETE FROM table USING table alias 
  WHERE table.field1 = alias.field1 AND table.field2 = alias.field2 AND
    table.max_field < alias.max_field

Por exemplo, eu tenho uma tabela, user_accounts , e quero adicionar uma restrição exclusiva no email, mas tenho algumas duplicatas. Diga também que eu quero manter o criado mais recentemente (ID máximo entre duplicatas).
DELETE FROM user_accounts USING user_accounts ua2
  WHERE user_accounts.email = ua2.email AND user_account.id < ua2.id;
  • Observação - USING não é SQL padrão, é uma extensão do PostgreSQL (mas muito útil), mas a pergunta original menciona especificamente o PostgreSQL.