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

Slet dublerede rækker fra tabel uden entydig nøgle

Hvis du har råd til at omskrive hele tabellen, er dette nok den enkleste fremgangsmåde:

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

Hvis du har brug for at målrette specifikt mod de duplikerede poster, kan du gøre brug af den interne ctid felt, som entydigt identificerer en række:

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

Vær meget forsigtig med ctid; det ændrer sig over tid. Men du kan stole på, at den forbliver den samme inden for rammerne af en enkelt erklæring.



  1. Udskriv indholdet af en datatabel

  2. Hvordan tilføjer man en brugerdefineret kolonne med en standardværdi i en sql-forespørgsel?

  3. Sådan kører du sql-scripts fra en pl sql-procedure

  4. Kan ikke tilføje en begrænsning af fremmednøgle på et datofelt