PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Elimina le righe duplicate dalla tabella senza chiave univoca

Se puoi permetterti di riscrivere l'intera tabella, questo è probabilmente l'approccio più semplice:

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

Se hai bisogno di indirizzare in modo specifico i record duplicati, puoi utilizzare il ctid interno campo, che identifica in modo univoco una riga:

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

Fai molta attenzione con ctid; cambia nel tempo. Ma puoi fare affidamento sul fatto che rimanga lo stesso nell'ambito di una singola affermazione.