PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Usuń zduplikowane wiersze z tabeli bez unikalnego klucza

Jeśli możesz sobie pozwolić na przepisanie całej tabeli, jest to prawdopodobnie najprostsze podejście:

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

Jeśli chcesz celować w zduplikowane rekordy, możesz skorzystać z wewnętrznego ctid pole, które jednoznacznie identyfikuje wiersz:

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

Bądź bardzo ostrożny z ctid; zmienia się w czasie. Ale możesz polegać na tym, że pozostanie on taki sam w zakresie jednej instrukcji.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nie znaleziono kolumny Postgresql, ale pokazuje się w opisie

  2. Ignorować cudzysłowy podczas importowania pliku CSV do PostgreSQL?

  3. zakleszczenie postgresa bez jawnego blokowania

  4. Jak stworzyć unikalny indeks z warunkowym i podzapytaniem w PostgreSQL?

  5. Wartości tablic są wyświetlane wiersz po wierszu dla pojedynczego identyfikatora za pomocą Postgresql