sql >> Database >  >> RDS >> PostgreSQL

Verwijder dubbele rijen uit tabel zonder unieke sleutel

Als je het je kunt veroorloven om de hele tabel te herschrijven, is dit waarschijnlijk de eenvoudigste aanpak:

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

Als u de dubbele records specifiek wilt targeten, kunt u gebruik maken van de interne ctid veld, dat een rij uniek identificeert:

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

Wees heel voorzichtig met ctid; het verandert in de loop van de tijd. Maar u kunt erop vertrouwen dat het binnen het bereik van een enkele verklaring hetzelfde blijft.



  1. Follow-up #1 op leidende wildcard-zoekopdrachten

  2. Database herstellen van .mdf- en .ldf-bestanden van SQL Server 2008

  3. Hoe wordt orakel rowid intern gegenereerd?

  4. Doorzoek alle kolommen van een tabel met een enkele waar-voorwaarde met een enkel trefwoord in mysql