Aus vielen Gründen in der Datenbank müssen wir häufig doppelte Zeilen aus der Oracle-Tabelle finden und löschen. Wir müssen häufig löschen, um die Datenprobleme zu beseitigen. Es gibt viele Möglichkeiten, doppelte Zeilen mit Oracle zu löschen, aber das Original zu behalten. Ich würde in diesem Beitrag einige schnellere Methoden vorstellen, um dies zu erreichen. Ich werde die Methode zeigen, bei der rowid verwendet wird, und die Methode, bei der rowid nicht verwendet wird. Bitte beachten Sie, dass Sie alle Spalten identifizieren müssen, die die Zeile zu einem Duplikat in der Tabelle machen, und alle diese Spalten in der entsprechenden Löschanweisung in SQL angeben müssen
So löschen Sie doppelte Zeilen aus Oracle
Hier sind einige Möglichkeiten, doppelte Zeilen auf einfache Weise zu löschen
(A) Schnelle Methode, aber Sie müssen alle Oracle-Indizes und -Trigger neu erstellen
create table my_table1 as select distinct * from my_table; drop my_table; rename my_table1 to my_table;
Beispiel
SQL> select * from mytest;ID NAME
------1 TST
2 TST
1 TST
SQL> create table mytest1 as select distinct * from mytest; Table created. SQL> select * from mytest1;ID NAME
-------2 TST
1 TST
SQL> drop table mytest; Table dropped. SQL> rename mytest1 to mytest; Table renamed. SQL> select * from mytest;ID NAME
-------2 TST
1 TST
(B) So finden und löschen Sie doppelte Datensätze in Oracle mithilfe von Rowid. Das folgende Beispiel zeigt eine Spalte. Wenn Sie basierend auf zwei Spalten löschen, können Sie zwei Spalten angeben
Delete from my_table where rowid not in ( select max(rowid) from my_table group by my_col_name );
(C) Orakel-Self-Join verwenden, um doppelte Zeilen zu löschen
DELETE FROM my_table A WHERE ROWID > (SELECT min(rowid) FROM my_table B WHERE A.key_values = B.key_values);
(D) Existiert-Klausel verwenden
delete from my_table t1 where exists (select 'x' from my_table t2 where t2.key_value1 = t1.key_value1 and t2.key_value2 = t1.key_value2 and t2.rowid > t1.rowid);
(E) Löschen Sie doppelte Datensätze bei der Verwendung von Oracle-Analysefunktionen
delete from my_table where rowid in (select rid from ( select rowid rid, row_number() over (partition by column_name order by rowid) rn from my_table) where rn <> 1 )
Wie gezeigt, gibt es viele Möglichkeiten, doppelte Zeilen in den Tabellen zu löschen. Dieser Befehl kann in vielen Situationen nützlich sein und kann je nach Anforderung verwendet werden. Bitte stellen Sie immer sicher, dass wir eine Sicherung zur Verfügung haben, bevor Sie irgendwelche Anweisungen ausführen. Wir sollten auch zuerst das Duplikat mithilfe der Abfrage finden und es dann überprüfen, bevor wir es festschreiben
Wie man doppelte Datensätze in Oracle mit Rowid findet
select * from my_table
where rowid not in
(select max(rowid) from my_table group by column_name);
Suchen Sie also zuerst das Duplikat mit der obigen Abfrage und löschen Sie es dann. Die Anzahl der Löschvorgänge sollte mit der Zeilenanzahl der obigen Abfrage übereinstimmen. Führen Sie jetzt die Abfrage zum Suchen von Duplikaten erneut aus. Wenn kein Duplikat vorhanden ist, sind wir gut für die Übergabe
Bitte sehen Sie sich den folgenden Artikel an, um tief in SQL einzutauchen
Oracle SQL-Tutorials:Enthält die Liste aller nützlichen Oracle SQL-Artikel. Erkunden Sie sie, um mehr über Oracle Sql zu erfahren, selbst wenn Sie Oracle Sql kennen
Fragen zu Oracle-Interviews:Auf dieser Seite finden Sie die 49 häufigsten Fragen und Antworten zu Oracle-Interviews:Grundlagen, Oracle SQL, das Ihnen bei Vorstellungsgesprächen hilft. Zusätzliches Material wird ebenfalls bereitgestellt
Where-Klausel in Oracle :Einschränkung des Datensatzes, Where-Klausel, What is Where-Klausel in SQL-Anweisung, Einzelzeilenfunktionen des Vergleichsoperators
in Oracle :Sehen Sie sich dies an, um Einzelzeilenfunktionen in SQL, Oracle-Daten herauszufinden Funktionen, Numerische Funktionen in SQL, Zeichenfunktion in SQL
Oracle-SQL-Abfragen
blog.oracle.com