sql >> Databáze >  >> RDS >> PostgreSQL

Odstraňte duplicitní řádky z tabulky bez jedinečného klíče

Pokud si můžete dovolit přepsat celou tabulku, je to pravděpodobně nejjednodušší přístup:

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

Pokud potřebujete konkrétně zacílit na duplicitní záznamy, můžete použít interní ctid pole, které jednoznačně identifikuje řádek:

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

Buďte velmi opatrní s ctid; mění se v čase. Ale můžete se spolehnout na to, že to zůstane stejné v rámci jediného prohlášení.



  1. Jak zřetězit řetězce v PostgreSQL

  2. jak vytvořit vypočítané pole v mysql?

  3. Sloučení (zřetězení) data a času do data a času

  4. Vlastní formátovaný JSON z MYSQL PDO pro použití v NVD3.js