[Oracle] Doppelte Einträge / Zeilen löschen

Thomas Darimont

Erfahrenes Mitglied
Hallo!

hier mal ein kleines Beispiel wie man ganz schnell doubletten aus einer Oracle Tabelle herausfiltern kann:

Tabelle: dbltest
Code:
SQL> create table dbltest(id int, name varchar(32));

Tabelle wurde angelegt.

insert into dbltest values(1,'AAA');
insert into dbltest values(1,'AAA');
insert into dbltest values(1,'AAA');
insert into dbltest values(1,'AAA');
insert into dbltest values(2,'BBB');
insert into dbltest values(2,'BBB');
insert into dbltest values(3,'CCC');

SQL> select * from dbltest;

        ID NAME
---------- --------------------------------
         1 AAA
         1 AAA
         1 AAA
         1 AAA
         2 BBB
         2 BBB
         3 CCC

7 Zeilen ausgewõhlt.

Nun das "magische" Statement:
(Wobei hier darauf zu achten ist, dass wir in der Group By Klausel die Spalte(n) angeben die wir bei der Überprüfung auf Übereinstimmung zu Rate ziehen. In dem Fall definieren wir als "Doubletten" die Zeilen die den gleichen "Name"-Wert haben.)
Code:
SQL> DELETE FROM dbltest WHERE ROWID NOT IN ( SELECT MIN(ROWID) FROM dbltest GROUP BY (name));

4 Zeilen wurden gel÷scht.

Danach ergibt ein anschließendes Select:
Code:
SQL> select * from dbltest;

        ID NAME
---------- --------------------------------
         1 AAA
         2 BBB
         3 CCC

Gruß Tom
 
Zurück