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.