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

Excluir linhas duplicadas da tabela


Você pode tentar isso executando várias vezes :
delete from mytable where id in (
    select max(id)
      from mytable
     group by name
    having count(1) > 1
);

Onde várias vezes é igual ao número máximo de repetições que você tem em name coluna.

Caso contrário, você pode tentar esta consulta mais complexa:
delete from mytable where id in (
    select id from mytable
    except 
    (
    select min(id)
      from mytable
     group by name
    having count(1) > 1
    union all
    select min(id)
      from mytable
     group by name
    having count(1) = 1
    )
);

Executar essa consulta apenas uma vez deve excluir tudo o que você precisa. Ainda não experimentei...