sql >> Databasteknik >  >> RDS >> PostgreSQL

Ta bort dubbletter av rader från tabellen utan unik nyckel

Om du har råd att skriva om hela tabellen är detta förmodligen den enklaste metoden:

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

Om du behöver rikta in dig specifikt på de dubblerade posterna kan du använda den interna ctid fält, som unikt identifierar en rad:

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

Var mycket försiktig med ctid; det förändras med tiden. Men du kan lita på att den förblir densamma inom ramen för ett enda uttalande.



  1. MySQL-datavalidering vid insättning

  2. Hur man exporterar SQL Server 2005-fråga till CSV

  3. GROUP BY-satsen i en fråga i MySQL kraschar bara min anslutning i vissa fall

  4. BLOB vs. VARCHAR för att lagra arrayer i en MySQL-tabell