top of page

Oracle: Como eliminar registros duplicados ?

Suponhamos que eu tenha uma tabela com vários registros duplicados e preciso criar alguma chave unique:

ALTER TABLE Customers ADD CONSTRAINT Customers_LastFirst UNIQUE (LastName, FirstName);

Se existirem valores duplicados, meu alter table dará erro. Se fizer o seguinte teste, verei que existem vários casos onde existem valores duplicados mesmo:

SELECT LastName, FirstName, COUNT(*) FROM Customers GROUP BY LastName, FirstName ORDER BY LastName, FirstName;
SELECT LastName, FirstName, COUNT(*) FROM Customers GROUP BY LastName, FirstName HAVING COUNT(*) > 1;

Uma solução interessante para eliminar todos estes duplicados, é usar uma função de grupo do tipo min:

SELECT MIN(ID) AS ID, LastName, FirstName FROM Customers GROUP BY LastName, FirstName;

Neste caso, basta executar o delete baseado neste valor no not in:

DELETE FROM Customers WHERE ID NOT IN (SELECT MIN(ID) FROM Customers GROUP BY LastName, FirstName);

Dúvidas? silverio@siltechconsult.com.br

 
 
 

Posts recentes

Ver tudo

Comentários


© 2022 por Siltech Consult

  • LinkedIn
bottom of page