PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Bagaimana cara menghapus duplikat dalam tabel?

Ini akan menyimpan salah satu duplikat:

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

Tabel Anda tidak memiliki pengenal unik yang dapat digunakan untuk "memilih satu yang selamat". Di situlah ctid Postgres sangat berguna, karena merupakan pengidentifikasi unik internal untuk setiap baris. Perhatikan bahwa Anda tidak boleh menggunakan ctid untuk lebih dari satu pernyataan. Ini bukan hal yang unik secara universal tetapi untuk runtime dari satu pernyataan itu baik-baik saja.

Contoh SQLFiddle:http://sqlfiddle.com/#!15/dabfc/1

Jika Anda ingin menyingkirkan semua baris yang diduplikasi:

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

Tidak ada solusi yang cepat di atas meja besar. Membuat tabel baru tanpa duplikat seperti yang ditunjukkan jjanes akan jauh lebih cepat jika Anda membutuhkan banyak baris dari tabel besar.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ImportError saat menjalankan cgi-bin di localhost - simbol tidak terdefinisi:lo_truncate64

  2. Nilai pertama dan terakhir dari fungsi jendela dalam satu baris di PostgreSQL

  3. Bagaimana saya bisa mendapatkan baris INSERTED dan UPDATED untuk operasi UPSERT di postgres

  4. org.postgresql.util.PSQLException:ERROR:kolom user0_.id tidak ada - Hibernate

  5. Kueri SQLAlchemy menunjukkan kesalahan Tidak dapat menggabungkan tabel/'alur kerja' yang dapat dipilih ke dirinya sendiri