PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie entferne ich Duplikate in einer Tabelle?

Dadurch wird eines der Duplikate behalten:

delete from join_table
where ctid not in (select min(ctid)
                   from join_table
                   group by id1, id2);

Ihre Tabelle hat keine eindeutige Kennung, die verwendet werden könnte, um „einen Überlebenden auszuwählen“. Dort befindet sich die ctid von Postgres ist praktisch, da es sich um eine interne eindeutige Kennung für jede Zeile handelt. Beachten Sie, dass Sie niemals ctid verwenden sollten für mehr als nur eine einzelne Aussage. Es ist kein universell einzigartiges Ding, aber für die Laufzeit einer einzelnen Anweisung ist es völlig in Ordnung.

SQLFiddle-Beispiel:http://sqlfiddle.com/#!15/dabfc/1

Wenn Sie alle loswerden möchten doppelte Zeilen:

delete from join_table
where (id1, id2) in (select id1, id2
                     from join_table
                     group by id1, id2
                     having count(*) > 1);

Keine Lösung wird auf einem großen Tisch schnell sein. Das Erstellen einer neuen Tabelle ohne Duplikate, wie jjanes gezeigt hat, wird viel schneller sein, wenn Sie eine beträchtliche Anzahl von Zeilen aus einer großen Tabelle benötigen.