Oracle: Como eliminar registros duplicados ?
- Siltech Consult
- 8 de out. de 2019
- 1 min de leitura
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
Comentários