Rumah > pangkalan data > Oracle > teks badan

Ringkaskan dan susun kaedah biasa untuk mengalih keluar data pendua daripada pangkalan data Oracle

WBOY
Lepaskan: 2022-08-22 17:59:30
ke hadapan
3324 orang telah melayarinya

Artikel ini membawakan anda pengetahuan yang berkaitan tentang Oracle Ia terutamanya memperkenalkan data pendua dalam jadual yang sering dikosongkan semasa pembersihan data. Jadi bagaimana untuk menanganinya dalam Oracle? Mari kita lihat bersama-sama, saya harap ia akan membantu semua orang.

Ringkaskan dan susun kaedah biasa untuk mengalih keluar data pendua daripada pangkalan data Oracle

Tutorial yang disyorkan: "Tutorial Video Oracle"

Mencipta data ujian

create table nayi224_180824(col_1 varchar2(10), col_2 varchar2(10), col_3 varchar2(10));
insert into nayi224_180824
select 1, 2, 3 from dual union all
select 1, 2, 3 from dual union all
select 5, 2, 3 from dual union all
select 10, 20, 30 from dual ;
commit;
select*from nayi224_180824;
Salin selepas log masuk
COL_1COL_2COL_3
123
123
523
102030

Untuk lajur yang ditentukan, semak set keputusan selepas penyahduplikasian

kaedah

select distinct t1.* from nayi224_180824 t1;
Salin selepas log masuk
COL_1COL_2COL_3
102030
123
523

adalah sangat terhad, kerana ia hanya boleh menyahduplikasi semua lajur pertanyaan. Jika saya ingin menyahduplikasi col_2 dan col3, maka set hasil saya hanya boleh mempunyai lajur col_2 dan col_3, tetapi bukan col_1.

select distinct t1.col_2, col_3 from nayi224_180824 t1
Salin selepas log masuk
COL_2COL_3
23
2030

Tetapi ia juga merupakan cara yang paling mudah dan paling mudah untuk difahami.

row_number()

select *
  from (select t1.*,
               row_number() over(partition by t1.col_2, t1.col_3 order by 1) rn
          from nayi224_180824 t1) t1
 where t1.rn = 1
;
Salin selepas log masuk
COL_1COL_2COL_3RN
1231
1020301

Menulis lebih menyusahkan, tetapi ia mempunyai fleksibiliti yang lebih besar.

Untuk lajur yang ditentukan, cari semua baris pendua

kiraan mempunyai

select *
  from nayi224_180824 t
 where (t.col_2, t.col_3) in (select t1.col_2, t1.col_3
                                from nayi224_180824 t1
                               group by t1.col_2, t1.col_3
                              having count(1) > 1)
Salin selepas log masuk
COL_1COL_2COL_3
123
123
523

Jadual perlu disemak dua kali, yang akan menjadi tidak cekap. Tidak disyorkan.

kira lebih

select *
  from (select t1.*,
               count(1) over(partition by t1.col_2, t1.col_3) rn
          from nayi224_180824 t1) t1
 where t1.rn > 1
;
Salin selepas log masuk
COL_1COL_2COL_3RN
1233
1233
5233

Hanya semak jadual sekali sahaja, disyorkan.

Padam semua baris pendua

delete from nayi224_180824 t
 where t.rowid in (
                   select rid
                     from (select t1.rowid rid,
                                   count(1) over(partition by t1.col_2, t1.col_3) rn
                              from nayi224_180824 t1) t1
                    where t1.rn > 1);
Salin selepas log masuk

Hanya ubah suai sedikit pernyataan di atas.

Padamkan data pendua dan simpan satu

Kaedah fungsi analitik

delete from nayi224_180824 t
 where t.rowid in (select rid
                     from (select t1.rowid rid,
                                  row_number() over(partition by t1.col_2, t1.col_3 order by 1) rn
                             from nayi224_180824 t1) t1
                    where t1.rn > 1);
Salin selepas log masuk

Mempunyai fleksibiliti tinggi yang konsisten bagi fungsi analitik. Anda boleh melakukan apa sahaja yang anda mahu dengan pengelompokan dan menukar klausa orderby untuk mencapai keperluan seperti "kekalkan id maksimum".

kumpulan mengikut

delete from nayi224_180824 t
 where t.rowid not in
       (select max(rowid) from nayi224_180824 t1 group by t1.col_2, t1.col_3);
Salin selepas log masuk

mengorbankan sedikit fleksibiliti sebagai pertukaran untuk kecekapan yang lebih tinggi.

Tutorial yang disyorkan: "Tutorial Video Oracle"

Atas ialah kandungan terperinci Ringkaskan dan susun kaedah biasa untuk mengalih keluar data pendua daripada pangkalan data Oracle. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:jb51.net
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan