PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Изтриване на дублиращи се редове от таблицата без уникален ключ

Ако можете да си позволите да пренапишете цялата таблица, това вероятно е най-простият подход:

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

Ако трябва конкретно да се насочите към дублираните записи, можете да използвате вътрешния ctid поле, което уникално идентифицира ред:

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

Бъдете много внимателни с ctid; променя се с времето. Но можете да разчитате, че той ще остане същият в обхвата на едно изявление.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Команда PostgreSql, за да видите данните от таблицата

  2. Получаване на функции DDL команда

  3. Вземете идентификатор от условно INSERT

  4. Множество първични ключове за таблица app_employee не са разрешени.

  5. Изтриване на записи с число, повтарящо се повече от 5