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

Löschen Sie doppelte Zeilen aus der Tabelle ohne eindeutigen Schlüssel

Wenn Sie es sich leisten können, die gesamte Tabelle neu zu schreiben, ist dies wahrscheinlich der einfachste Ansatz:

WITH Deleted AS (
  DELETE FROM discogs.releases_labels
  RETURNING *
)
INSERT INTO discogs.releases_labels
SELECT DISTINCT * FROM Deleted

Wenn Sie gezielt auf die duplizierten Datensätze abzielen müssen, können Sie die interne ctid verwenden Feld, das eine Zeile eindeutig identifiziert:

DELETE FROM discogs.releases_labels
WHERE ctid NOT IN (
  SELECT MIN(ctid)
  FROM discogs.releases_labels
  GROUP BY label, release_id, catno
)

Seien Sie sehr vorsichtig mit ctid; es ändert sich im laufe der zeit. Aber Sie können sich darauf verlassen, dass es im Rahmen einer einzigen Aussage gleich bleibt.