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

Как да премахнете дубликати в таблица?

Това ще запази един от дубликатите:

delete from join_table
where ctid not in (select min(ctid)
                   from join_table
                   group by id1, id2);

Вашата таблица няма уникален идентификатор, който може да се използва за „избиране на един оцелял“. Там е ctid на Postgres е полезен, тъй като е вътрешен уникален идентификатор за всеки ред. Имайте предвид, че никога не трябва да използвате ctid за повече от едно изявление. Това не са универсално уникални неща, но за времето на изпълнение на един израз е добре.

Пример за SQLFiddle:http://sqlfiddle.com/#!15/dabfc/1

Ако искате да се отървете от всички редове, които се дублират:

delete from join_table
where (id1, id2) in (select id1, id2
                     from join_table
                     group by id1, id2
                     having count(*) > 1);

Нито едно от решенията няма да бъде бързо на голяма маса. Създаването на нова таблица без дубликати, както jjanes показа, ще бъде много по-бързо, ако имате нужда от значителен брой редове от голяма таблица.



  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 тригера и C# Windows Service да работят заедно?

  2. След актуализиране до macOS Big Sur не мога да се свържа с моята база данни PostgreSQL с MAMP

  3. SQLAlchemy:Проверете дали дадена стойност е в списък

  4. Как да посочите име на хост във файла pg_hba.conf на postgresql?

  5. PostgreSQL SQL заявка за обхождане на цял неориентиран график и връщане на всички намерени ръбове