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

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

WBOY
WBOYnach vorne
2022-08-22 17:59:303378Durchsuche

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;
COL_1 COL_2 COL_3
1 2 3
1 2 3
5 2 3
10 20 30

Schauen Sie sich das Duplikat an s Ergebnismenge

eindeutig

select distinct t1.* from nayi224_180824 t1;
Die Methode
COL_1 COL_2 COL_3
10 20 30
1 2 3
5 2 3

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
COL_2 COL_3
2 3
20 30

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
;
COL_1 COL_2 COL_3 RN
1 2 3 1
10 20 30 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)
COL_1 COL_2 COL_3
1 2 3
1 2 3
5 2 3

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
;
COL_1 COL_2 COL_3 RN
1 2 3 3
1 2 3 3
5 2 3 3

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);

Ä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);

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);

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:jb51.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen