Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

2 Cara Menghapus Baris Duplikat di Oracle

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menggunakan konstanta paket dalam pernyataan SQL SELECT?

  2. Bagaimana saya bisa menulis SQL di Oracle dalam kasus saya?

  3. Saran Menggunakan Tabel Pivot di Oracle

  4. SSIS - nilai tidak dapat dikonversi karena potensi kehilangan data

  5. Bagaimana Cara Mencetak 1 hingga 10 Tanpa Menggunakan Loop di PL/SQL?