działa zarówno NORMALNEGO SQL i PostgreSQL (RÓWNIEŻ PRACE NA AWS przesunięciu ku czerwieni)
DROP TABLE IF EXISTS backupOfTheTableContainingDuplicates;
CREATE TABLE aNewEmptyTemporaryOrBackupTable
AS SELECT DISTINCT * FROM originalTableContainingDuplicates;
TRUNCATE TABLE originalTableContainingDuplicates;
INSERT INTO originalTableContainingDuplicates SELECT * FROM
aNewEmptyTemporaryOrBackupTable ;
DROP TABLE aNewEmptyTemporaryOrBackupTable ;
WYJAŚNIENIE z powyższych SQL SCRIPT
Więc
The 1st zapytanie zapewnia, jeśli posiadasz kopię zapasową/tabelę tymczasową oryginalnej tabeli zawierającej g duplikuje, a następnie upuść tę tabelę.
Druga kwerenda, tworzy nową tabelę (tymczasową/zapasową) z unikatowymi wpisami w oryginalnej tabeli zawierającej duplikat, więc nowa tabela tymczasowa jest taka sama jak oryginalna tabela MINUS duplikatów.
Trzecia kwerenda, obcina lub opróżnia oryginalną tabelę.
4. Zapytanie, wstawia lub kopiuje wszystkie unikatowe wpisy w tabeli tymczasowej do oryginalnej tabeli, która została ostatnio obcięta (nie ma danych). Po wykonaniu tej kwerendy, Tablica Oryginalna zostanie wypełniona danymi UNIQUE, które znajdowały się w tabeli tymczasowej.
Piąta kwerenda, usuwa/usuwa niepotrzebny tabelę tymczasową.
Wynik końcowy to, że oryginalna tabela ma tylko UNIKALNE ENTRIES i żadnych duplikatów.
Idealne, dzięki! Nie wiedziałem o ctid –
Nie używaj go, jest za wolno! –
Chociaż to rozwiązanie zdecydowanie działa, @rapimo [rozwiązanie poniżej] (https://stackoverflow.com/a/12963112/1156554) wykonuje znacznie szybciej. Uważam, że ma to związek z tym, że instrukcja wewnętrznego wyboru jest wykonywana N razy (dla wszystkich N wierszy w tabeli duplikatów) zamiast grupowania, które jest realizowane w innym rozwiązaniu. – David