Heim >Datenbank >Oracle >So entfernen Sie doppelte Daten in Oracle

So entfernen Sie doppelte Daten in Oracle

coldplay.xixi
coldplay.xixiOriginal
2021-01-04 17:36:2652624Durchsuche

Oracles Methode zum Entfernen doppelter Daten: 1. Finden Sie alle doppelten Zeilen für die angegebene Spalte und löschen Sie sie. 2. Löschen Sie alle doppelten Zeilen. .

So entfernen Sie doppelte Daten in Oracle

Die Betriebsumgebung dieses Artikels: Windows 7-System, Oracle9i-Version, Dell G3-Computer.

Empfohlen (kostenlos): Oracle-Datenbank

Oracle-Methode zum Entfernen doppelter Daten:

Testdaten erstellen

create table nayi224_180824(col_1 varchar2(10), col_2 varchar2(10), col_3 varchar2(10));
insert into nayi224_180824select 1, 2, 3 from dual union allselect 1, 2, 3 from dual union allselect 5, 2, 3 from dual union allselect 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

Überprüfen Sie für die angegebene Spalte den Ergebnissatz nach der Deduplizierung 20

30

1 Die Methode 23523
select distinct t1.* from nayi224_180824 t1;
COL_2COL_32320
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.

30

select distinct t1.col_2, col_3 from nayi224_180824 t1
COL_1COL_2COL_3RN1
Aber es ist auch die einfachste und am leichtesten zu verstehende Art zu schreiben. row_number()

2

3

1102030 1Suchen Sie für die angegebene Spalte alle doppelten ZeilenAnzahl mit
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_1COL_2COL_3
Es ist viel schwieriger zu schreiben, bietet aber eine größere Flexibilität.

1 2

3

1 23523Count Over
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_1COL_2COL_3RN
Sie müssen die Tabelle zweimal überprüfen, daher ist die Effizienz gering. Nicht empfohlen.

1

2 3

312335233Löschen Sie alle doppelten Zeilen
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;
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,                                   
count(1) over(partition by t1.col_2, t1.col_3) rn                              
from nayi224_180824 t1) t1                    
where t1.rn > 1);
group by
Sie müssen die Tabelle nur einmal überprüfen, empfohlen. Ändern Sie einfach die obige Anweisung leicht.
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 „Maximale ID beibehalten“ zu erfüllen.

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 etwas Flexibilität zugunsten einer höheren Effizienz geopfert.

Das obige ist der detaillierte Inhalt vonSo entfernen Sie doppelte Daten in Oracle. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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