As u in Oracle werk, kan u agterkom dat sommige van u rekords duplikate bevat. U kan hierdie dubbele rye uitvee deur dit te identifiseer en die RowID- of ryadres daarvan te gebruik. Voordat u begin, moet u 'n rugsteuntabel skep as u daarna moet verwys nadat u rekords verwyder het.
Stappe
Metode 1 van 4: Identifiseer u duplikaat
Stap 1. Identifiseer die duplikaat
Identifiseer in hierdie geval die voorbeeld duplikaat, "Alan." Maak seker dat die rekords wat u probeer verwyder, eintlik duplikate is deur die onderstaande SQL in te voer.
Stap 2. Identifiseer uit 'n kolom met die naam "Name
'In die geval van 'n kolom met die naam' Name ', sou u' column_name 'vervang met Name.
Stap 3. Identifiseer uit ander kolomme
As u die duplikaat probeer identifiseer deur 'n ander kolom, byvoorbeeld die ouderdom van Alan eerder as sy naam, sou u 'Ages' in die plek van 'column_name' ensovoorts invoer.
kies kolomnaam, tel (kolomnaam) uit tabelgroep volgens kolomnaam met tel (kolomnaam)> 1;
Metode 2 van 4: 'n Enkele duplikaat uitvee
Stap 1. Kies "naam uit name
"Na" SQL ", wat staan vir Standard Query Language, voer" kies naam uit name "in.
Stap 2. Vee alle rye met die duplikaatnaam uit
Tik na "SQL" op "delete from names where name = 'Alan';." Let daarop dat hoofletters hier belangrik is, sodat al die rye met die naam 'Alan' verwyder word. Na "SQL", voer "commit" in.
Stap 3. Huur die ry sonder 'n duplikaat
Noudat u alle rye met die voorbeeldnaam "Alan" verwyder het, kan u een terug invoeg deur "invoeg in naamwaardes ('Alan') in te voer;." Na "SQL", voer "commit" in om u nuwe ry te skep.
Stap 4. Sien u nuwe lys
Nadat u die bogenoemde stappe voltooi het, kan u seker maak dat u nie meer dubbele rekords het nie, deur 'kies * uit name' in te voer.
SQL> kies naam uit name; NAAM ------------------------------ Alan Carrie Tom Alan rye gekies. SQL> verwyder uit name waar naam = 'Alan'; rye uitgevee. SQL> verbind; Pleeg voltooi. SQL> voeg waardes in ('Alan'); ry geskep. SQL> verbind; Pleeg voltooi. SQL> kies * uit name; NAAM ------------------------------ Alan Carrie Tom rye gekies.
Metode 3 van 4: Meervoudige duplikate uitvee
Stap 1. Kies die RowID wat u wil verwyder
Na "SQL", voer "kies rowid, naam uit name;."
Stap 2. Vee die duplikaat uit
Tik na "SQL" op "delete from names a where rowid> (select min (rowid) from names b where b.name = a.name);" om dubbele rekords te verwyder.
Stap 3. Kyk vir duplikate
Nadat u die bogenoemde voltooi het, kontroleer die opdragte of u nog steeds dubbele rekords het deur 'select rowid, name from names;' in te voer en dan "pleeg."
SQL> kies rowid, naam uit name; ROWID NAAM ------------------ ------------------------------ AABJnsAAGAAAdfOAAA Alan AABJnsAAGAAAdfOAAB Alan AABJnsAAGAAAdfOAAC Carrie AABJnsAAGAAAdfOAAD Tom AABJnsAAGAAAdfOAAF Alan rye gekies. SQL> verwyder uit name a waar rowid> (kies min (rowid) uit name b waar b.name = a.name); rye uitgevee. SQL> kies rowid, naam uit name; ROWID NAAM ------------------ ------------------------------ AABJnsAAGAAAdfOAAA Alan AABJnsAAGAAAdfOAAC Carrie AABJnsAAGAAAdfOAAD Tom rye gekies. SQL> verbind; Pleeg voltooi.
Metode 4 van 4: Rye met kolomme uitvee
Stap 1. Kies u rye
Na "SQL", voer "kies * uit name;" om jou rye te sien.
Stap 2. Vee dubbele rye uit deur hul kolom te identifiseer
Na "SQL", voer "verwyder uit name a waar rowid> (kies min (rowid) uit name b waar b.name = a.name en b.age = a.age);" om die duplikaatrekords te verwyder.
Stap 3. Kyk vir duplikate
Nadat u die bogenoemde stappe voltooi het, voer "kies * uit name;" en dan "verbind" om te kontroleer of u die duplikaatrekords suksesvol verwyder het.
SQL> kies * uit name; NAAM OUDERDOM -------------------------------- Alan 50 Carrie 51 Tom 52 Alan 50 rye gekies. SQL> verwyder uit name a waar rowid> (kies min (rowid) uit name b waar b.name = a.name en b.age = a.age); ry uitgevee. SQL> kies * uit name; NAAM OUDERDOM ---------------------------------Alan 50 Carrie 51 Tom 52 rye gekies. SQL> verbind; Pleeg voltooi.
Waarskuwings
-
Skep 'n rugsteunstafel in u eie aanmelding wat u kan gebruik om aan te toon wat daar was voordat enige uitvee plaasgevind het (indien daar enige vrae is).
SQL> skep tabel alan.names_backup as kies * uit name; Tabel geskep.