Wenn du mit Oracle arbeitest, stellst du vielleicht hin und wieder fest, dass einige deiner Datensätze Duplikate haben. Du kannst diese doppelten Zeilen löschen, indem du sie identifizierst und ihre RowID, d.h. ihre "Zeilenadresse" nutzt. Zuerst solltest du allerdings ein Backup deiner Tabelle erstellen, falls du nach dem Löschen von Datensätzen auf diese referenzieren musst.
Vorgehensweise
-
Identifiziere das Duplikat. Identifiziere in diesem Fall das Beispiel-Duplikat "Alan". Stelle sicher, dass die Datensätze, die du löschen möchtest, tatsächlich Duplikate sind, indem du den SQL-Befehl unten eingibst.
-
Identifizieren in einer Spalte mit der Bezeichnung "Namen". In diesem Fall würdest du "column_name" durch "Namen" ersetzen.
-
In anderen Spalten identifizieren. Wenn du das Duplikat in einer anderen Spalte identifizieren möchtest, z. B. das Alter von Alan anstelle seines Namens, würdest du anstelle von "column_name" "Alter" eingeben und so weiter.
select column_name , count ( column_name ) from table group by column_name having count ( column_name ) > 1 ;
Werbeanzeige
-
Wähle "name from Namen". Gib nach "SQL" (dies steht für Standard Query Language) "select name from Namen" ein.
-
Lösche alle Zeilen mit dem doppelten Namen. Gib nach "SQL" "delete from Namen where name='Alan';" ein. Achte darauf, dass Groß- und Kleinschreibung hier wichtig ist, dies löscht also alle Zeilen mit dem Namen "Alan". Gib nach "SQL" "commit" ein. [1] X Forschungsquelle
-
Gib die Zeile ohne Duplikat neu ein. Jetzt, wo du alle Zeilen mit dem Beispielnamen "Alan" gelöscht hast, kannst du eine wieder einfügen, indem du "insert into name values ('Alan');" eingibst. Gib nach "SQL" "commit" ein, um deine neue Zeile zu erstellen.
-
Sieh dir deine neue Liste an. Wenn du die Schritte oben ausgeführt hast, kannst du prüfen, ob es keine doppelten Datensätze mehr gibt, indem du "select * from Namen" eingibst.
SQL > select name from Namen ; NAME
Alan Carrie Tom Alan rows selected . SQL > delete from names where name = 'Alan' ; rows deleted . SQL > commit ; Commit complete . SQL > insert into names values ( 'Alan' ); row created . SQL > commit ; Commit complete . SQL > select * from names ; NAME
Alan Carrie Tom rows selected .Werbeanzeige
-
Wähle die RowID, die du löschen möchtest. Gib nach "SQL" "select rowid, name from names;" ein.
-
Lösche das Duplikat. Gib nach "SQL" "delete from names a where rowid > (select min(rowid) from names b where b.name=a.name);" ein, um doppelte Datensätze zu löschen. [2] X Forschungsquelle
-
Prüfe auf Duplikate. Nachdem du die Schritte oben ausgeführt hast, prüfe, ob du noch immer doppelte Datensätze hast, indem du "select rowid,name from names;" und dann "commit" eingibst.
SQL > select rowid , name from names ; ROWID NAME ------------------ ------------------------------ AABJnsAAGAAAdfOAAA Alan AABJnsAAGAAAdfOAAB Alan AABJnsAAGAAAdfOAAC Carrie AABJnsAAGAAAdfOAAD Tom AABJnsAAGAAAdfOAAF Alan rows selected . SQL > delete from names a where rowid > ( select min ( rowid ) from names b where b . name = a . name ); rows deleted . SQL > select rowid , name from names ; ROWID NAME ------------------ ------------------------------ AABJnsAAGAAAdfOAAA Alan AABJnsAAGAAAdfOAAC Carrie AABJnsAAGAAAdfOAAD Tom rows selected . SQL > commit ; Commit complete .
Werbeanzeige
-
Wähle deine Zeilen. Gib nach "SQL" "select * from names;" ein, um deine Zeilen zu sehen.
-
Lösche doppelte Zeilen, indem du ihre Spalten identifizierst. Gib nach "SQL" "delete from names a where rowid > (select min(rowid) from names b where b.name=a.name and b.age=a.age);" ein, um die doppelten Datensätze zu löschen. [3] X Forschungsquelle
-
Prüfe auf Duplikate. Wenn du die Schritte oben ausgeführt hast, gib "select * from names;" und dann "commit" ein, um zu überprüfen, ob du die doppelten Datensätze erfolgreich gelöscht hast.
SQL > select * from names ; NAME AGE ------------------------------ ---------- Alan 50 Carrie 51 Tom 52 Alan 50 rows selected . SQL > delete from names a where rowid > ( select min ( rowid ) from names b where b . name = a . name and b . age = a . age ); row deleted . SQL > select * from names ; NAME AGE ------------------------------ ---------- Alan 50 Carrie 51 Tom 52 rows selected . SQL > commit ; Commit complete .
Werbeanzeige
Warnungen
- Erstelle unter deinem eigenen Login ein Backup der Tabelle, die du verwenden kannst, um zu zeigen, was vorhanden war, bevor du etwas gelöscht hast (falls irgendwelche Fragen auftauchen).
SQL > create table alan . names_backup as select * from names ; Table created .
Werbeanzeige
Referenzen
Werbeanzeige