Temat: [postgres] usuwanie zduplikowanych rekordów
Piotr Likus:
Monika Helena Myszkiewicz:
DELETE FROM nasza_tabela
WHERE EXISTS
(SELECT 1 FROM nasza_tabela A
WHERE
A.UNIKALNY_IDENTYFIKATOR = nasza_tabela.UNIKALNY_IDENTYFIKATOR and A.OID < nasza_tabela.OID);
Zdecydowanie najlepsze rozwiązanie, dodatkowo jeśli nie ma OID (bo np. jest to SQLite lub inny Access) to przepis ogólny jest prosty:
Jeśli chodzi o "zdecydowanie najlepsze" rozwiązania, to był bym bardzo ostrożny.. nie ma najlepszych rozwiązań ;)
W moim przypadku pomogło:
1/ stworzenie tymczasowej tabeli o strukturze identycznej z tabelą, z której chcemy pozbyć się duplikatów
2/ insert into tbl_temp (select distrinc * from tbl)
3/ usunięcie rekordów z tbl
4/ insert w odwrotną stronę: into tbl (select * from tbl_temp)
5/ założenie kluczy, indeksów, sekwencji
6/ usunięcie tabeli tymczasowej
gwoli ścisłości:
1/ zdublowane rekordy były IDENTYCZNE, łącznie z id rekordu
2/ chciałem usunąć DUPLIKATY oryginalnych rekordów