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

Remover duplicata de uma tabela


Essa é uma das muitas razões pelas quais todas as tabelas devem ter uma chave primária (não necessariamente um número de ID ou IDENTIDADE, mas uma combinação de uma ou mais colunas que identificam exclusivamente uma linha e que tem sua exclusividade imposta no banco de dados).

Sua melhor aposta é algo assim:
SELECT field1, field2, field3, count(*) 
INTO temp_table1
FROM table1
GROUP BY field1, field2, field3 having count(*) > 1

DELETE T1
FROM table1 T1
INNER JOIN (SELECT field1, field2, field3
      FROM table1
      GROUP BY field1, field2, field3 having count(*) > 1) SQ ON
            SQ.field1 = T1.field1 AND
            SQ.field2 = T1.field2 AND
            SQ.field3 = T1.field3

INSERT INTO table1 (field1, field2, field3)
SELECT field1, field2, field3
FROM temp_table1

DROP TABLE temp_table1