Heim > Datenbank > Oracle > Hauptteil

Fassen Sie gängige Methoden zum Entfernen doppelter Daten aus der Oracle-Datenbank zusammen und organisieren Sie sie

WBOY
Freigeben: 2022-08-22 17:59:30
nach vorne
3325 Leute haben es durchsucht

Dieser Artikel vermittelt Ihnen relevantes Wissen über Oracle. Er stellt hauptsächlich die doppelten Daten in der Tabelle vor, die bei der Datenbereinigung häufig entfernt werden. Schauen wir es uns gemeinsam an, ich hoffe, es wird für alle hilfreich sein.

Fassen Sie gängige Methoden zum Entfernen doppelter Daten aus der Oracle-Datenbank zusammen und organisieren Sie sie

Empfohlenes Tutorial: „Oracle Video Tutorial

Testdaten erstellen

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;
Nach dem Login kopieren
COL_1COL_2COL_3
123
123
523
102030

Schauen Sie sich das Duplikat an s Ergebnismenge

eindeutig

select distinct t1.* from nayi224_180824 t1;
Nach dem Login kopieren
Die Methode
COL_1COL_2COL_3
102030
12 3
523

ist sehr eingeschränkt, da sie nur alle Abfragespalten deduplizieren kann. Wenn ich col_2 und col3 deduplizieren möchte, kann mein Ergebnissatz nur die Spalten col_2 und col_3 enthalten, nicht jedoch col_1.

select distinct t1.col_2, col_3 from nayi224_180824 t1
Nach dem Login kopieren
COL_2COL_3
23
2030

Aber es ist auch die einfachste und am leichtesten zu verstehende Art zu schreiben.

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
;
Nach dem Login kopieren
COL_1COL_2COL_3RN
123 1
102030 1

Es ist viel schwieriger zu schreiben, bietet aber eine größere Flexibilität.

Suchen Sie für die angegebene Spalte alle doppelten Zeilen

Anzahl mit

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)
Nach dem Login kopieren
COL_1COL_2COL_3
12 3
12 3
523

Sie müssen die Tabelle zweimal überprüfen, daher ist die Effizienz gering. Nicht empfohlen.

count over

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
;
Nach dem Login kopieren
COL_1COL_2COL_3RN
123 3
1233
5233

Sie müssen die Tabelle nur einmal überprüfen, empfohlen.

Löschen Sie alle doppelten Zeilen

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);
Nach dem Login kopieren

Ändern Sie einfach die obige Anweisung leicht.

Löschen Sie doppelte Daten und behalten Sie eine bei.

Analytische Funktionsmethode

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);
Nach dem Login kopieren

hat die gleichbleibend hohe Flexibilität von Analysefunktionen. Sie können mit der Gruppierung machen, was Sie wollen, und die orderby-Klausel ändern, um Anforderungen wie „Beibehalten der maximalen ID“ zu erfüllen.

group by

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);
Nach dem Login kopieren

hat etwas Flexibilität im Austausch für höhere Effizienz geopfert.

Empfohlenes Tutorial: „Oracle Video Tutorial

Das obige ist der detaillierte Inhalt vonFassen Sie gängige Methoden zum Entfernen doppelter Daten aus der Oracle-Datenbank zusammen und organisieren Sie sie. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:jb51.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage