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

Jak usunąć duplikaty w tabeli?

Dzięki temu jeden z duplikatów zostanie zachowany:

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

Twoja tabela nie ma unikalnego identyfikatora, którego można by użyć do „wybrania jednego ocalałego”. To tam ctid Postgresa przydaje się, ponieważ jest wewnętrznym unikalnym identyfikatorem dla każdego wiersza. Pamiętaj, że nigdy nie powinieneś używać ctid więcej niż tylko jedno oświadczenie. Nie jest to uniwersalnie unikatowa rzecz, ale w czasie wykonywania pojedynczej instrukcji jest w porządku.

Przykład SQLFiddle:http://sqlfiddle.com/#!15/dabfc/1

Jeśli chcesz pozbyć się wszystkich wiersze, które są zduplikowane:

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

Żadne rozwiązanie nie będzie szybkie na dużym stole. Tworzenie nowej tabeli bez duplikatów, jak pokazał jjanes, będzie znacznie szybsze, jeśli potrzebujesz znacznej liczby wierszy z dużej tabeli.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy jest jakiś skrót do korzystania z dblink w Postgresie?

  2. Wstaw podział wiersza w postgresql podczas aktualizowania pola tekstowego

  3. Jak używać UUID jako klucza podstawowego dla Hibernate Entity?

  4. jak przekonwertować minuty całkowite na interwał w postgresie

  5. Usuń zduplikowaną kolumnę po zapytaniu SQL