Opsi berikut dapat digunakan untuk menghapus baris duplikat di Oracle Database.
Contoh-contoh ini menghapus baris duplikat tetapi tetap mempertahankannya. Jadi jika ada tiga baris yang identik misalnya, itu menghapus dua di antaranya dan menyimpan satu. Ini sering disebut sebagai de-duping tabel.
Contoh Data
Misalkan kita memiliki tabel dengan data berikut:
SELECT * FROM Pets;
Hasil:
PETID PETNAME PETTYPE 1 Wag Dog 1 Wag Dog 2 Scratch Cat 3 Tweet Bird 4 Bark Dog 4 Bark Dog 4 Bark Dog
Kita dapat melihat bahwa dua baris pertama adalah duplikat, seperti halnya tiga baris terakhir.
Dalam hal ini, semua kolom adalah duplikat. Tidak ada kolom kunci utama. Biasanya, orang mungkin mengharapkan PetId
kolom menjadi kunci utama, tetapi berisi nilai duplikat dan oleh karena itu tidak dapat menjadi kunci utama.
Jika itu adalah kunci utama, itu akan berisi nilai unik di semua baris, dan tidak akan ada duplikat.
Terlepas dari itu, di bawah ini adalah dua opsi untuk menemukan dan menghapus baris duplikat meskipun tidak ada kunci utama.
Opsi 1
Berikut salah satu opsi untuk menghapus baris duplikat dari tabel di atas:
DELETE FROM Pets
WHERE EXISTS (
SELECT 1 FROM Pets p2
WHERE Pets.PetName = p2.PetName
AND Pets.PetType = p2.PetType
AND Pets.rowid > p2.rowid
);
SELECT * FROM Pets;
Hasil:
3 row(s) deleted. PETID PETNAME PETTYPE 1 Wag Dog 2 Scratch Cat 3 Tweet Bird 4 Bark Dog
Tabel sekarang telah ditipu. Tiga baris telah dihapus, dan empat yang tersisa.
Salah satu baris duplikat untuk anjing kami "Wag" telah dihapus dan yang lainnya tetap ada. Dua baris duplikat untuk "Bark" juga telah dihapus.
rowid
Oracle pseudocolumn memungkinkan kami untuk melakukan operasi de-dupe ini. Kami dapat merujuknya dalam kueri kami untuk menentukan baris mana yang akan dihapus.
Cara kerjanya adalah, setiap baris dalam database Oracle memiliki rowid
pseudocolumn yang mengembalikan alamat baris. rowid
adalah pengidentifikasi unik untuk baris dalam tabel, dan biasanya nilainya secara unik mengidentifikasi baris dalam database. Oleh karena itu, kami dapat mengidentifikasi setiap baris meskipun kami tidak memiliki kunci utama atau bidang ID unik lainnya.
Namun, penting untuk dicatat bahwa baris dalam tabel berbeda yang disimpan bersama dalam cluster yang sama dapat memiliki rowid
yang sama. .
Opsi 2
Dengan asumsi tabel telah dipulihkan dengan data aslinya (termasuk baris duplikat), berikut ini opsi lain untuk menghapus baris duplikat.
DELETE FROM Pets
WHERE rowid > (
SELECT MIN(rowid) FROM Pets p2
WHERE Pets.PetName = p2.PetName
AND Pets.PetType = p2.PetType
);
SELECT * FROM Pets;
Hasil:
PETID PETNAME PETTYPE 1 Wag Dog 2 Scratch Cat 3 Tweet Bird 4 Bark Dog
Hasil yang sama seperti contoh sebelumnya.