Wanneer u in Oracle werkt, kan het zijn dat sommige van uw records dubbele gegevens bevatten. U kunt deze dubbele rijen verwijderen door ze te identificeren en de RowID of het rijadres te gebruiken. Voordat u begint, moet u een back-uptabel maken voor het geval u ernaar moet verwijzen nadat u records hebt verwijderd.
Stappen
Methode 1 van 4: Uw duplicaat identificeren
Stap 1. Identificeer het duplicaat
Identificeer in dit geval het voorbeeldduplicaat, 'Alan'. Zorg ervoor dat de records die u probeert te verwijderen, daadwerkelijk duplicaten zijn door de onderstaande SQL in te voeren.
Stap 2. Identificeren vanuit een kolom met de naam "Namen
"In het geval van een kolom met de naam "Namen", zou u "column_name" vervangen door Namen.
Stap 3. Identificeren vanuit andere kolommen
Als u het duplicaat probeerde te identificeren aan de hand van een andere kolom, bijvoorbeeld de leeftijd van Alan in plaats van zijn naam, zou u "Leeftijden" invoeren in de plaats van "kolomnaam" enzovoort.
selecteer kolomnaam, aantal (kolomnaam) uit tabelgroep op kolomnaam met telling (kolomnaam)> 1;
Methode 2 van 4: Een enkel duplicaat verwijderen
Stap 1. Selecteer "naam uit namen
"Na "SQL", wat staat voor Standard Query Language, voert u "select name from names" in.
Stap 2. Verwijder alle rijen met de dubbele naam
Voer na "SQL" "delete from names where name='Alan';" in. Merk op dat hoofdlettergebruik hier belangrijk is, dus hiermee worden alle rijen met de naam "Alan" verwijderd. Voer na "SQL" "commit" in.
Stap 3. Huur de rij zonder een duplicaat
Nu u alle rijen met de voorbeeldnaam "Alan" hebt verwijderd, kunt u er een terug invoegen door "insert in name values ('Alan');." Voer na "SQL" "commit" in om uw nieuwe rij te maken.
Stap 4. Bekijk je nieuwe lijst
Nadat u de bovenstaande stappen heeft voltooid, kunt u controleren of u geen dubbele records meer heeft door "selecteer * uit namen" in te voeren.
SQL > selecteer naam uit namen; NAAM ------------------------------ Alan Carrie Tom Alan rijen geselecteerd. SQL > verwijderen uit namen waar naam='Alan'; rijen verwijderd. SQL > vastleggen; Commit compleet. SQL > waarden invoegen in namen ('Alan'); rij gemaakt. SQL > vastleggen; Commit compleet. SQL > selecteer * uit namen; NAAM ------------------------------ Alan Carrie Tom-rijen geselecteerd.
Methode 3 van 4: Meerdere duplicaten verwijderen
Stap 1. Selecteer de RowID die u wilt verwijderen
Voer na "SQL" "select rowid, name from names;" in.
Stap 2. Verwijder het duplicaat
Voer na "SQL" "verwijderen uit namen a waar rowid > (selecteer min(rowid) uit namen b waarbij b.name=a.name);" om dubbele records te verwijderen.
Stap 3. Controleer op duplicaten
Nadat u het bovenstaande hebt voltooid, controleren de opdrachten om te zien of u nog steeds dubbele records heeft door "select rowid, naam uit namen;" in te voeren. en dan "toezeggen".
SQL > selecteer rowid, naam uit namen; ROWID NAAM ------------------ ------------------------------ AABJnsAAGAAAdfOAAA Alan AABJnsAAGAAAdfOAAB Alan AABJnsAAGAAAdfOAAC Carrie AABJnsAAGAAAdfOAAD Tom AABJnsAAGAAAdfOAAF Alan rijen geselecteerd. SQL > verwijder uit namen a waar rowid > (selecteer min(rowid) uit namen b waar b.name=a.name); rijen verwijderd. SQL > selecteer rowid, naam uit namen; ROWID NAAM ------------------ ------------------------------ AABJnsAAGAAAdfOAAA Alan AABJnsAAGAAAdfOAAC Carrie AABJnsAAGAAAdfOAAD Tom rijen geselecteerd. SQL > vastleggen; Commit compleet.
Methode 4 van 4: Rijen met kolommen verwijderen
Stap 1. Selecteer je rijen
Voer na "SQL" "select * from names" in; om je rijen te zien.
Stap 2. Verwijder dubbele rijen door hun kolom te identificeren
Voer na "SQL'" "delete from names a where rowid > (select min(rowid) from names b where b.name=a.name and b.age=a.age);" in. om de dubbele records te verwijderen.
Stap 3. Controleer op duplicaten
Nadat u de bovenstaande stappen hebt voltooid, voert u "select * from names;" in. en vervolgens "vastleggen" om te controleren of u de dubbele records met succes hebt verwijderd.
SQL > selecteer * uit namen; NAAM LEEFTIJD ------------------------------ ---------- Alan 50 Carrie 51 Tom 52 Alan 50 rijen geselecteerd. SQL > verwijder uit namen a waar rowid > (selecteer min(rowid) uit namen b waar b.name=a.name en b.age=a.age); rij verwijderd. SQL > selecteer * uit namen; NAAM LEEFTIJD ------------------------------ ---------- Alan 50 Carrie 51 Tom 52 rijen geselecteerd. SQL > vastleggen; Commit compleet.
Waarschuwingen
-
Maak een back-uptabel in uw eigen aanmelding die u kunt gebruiken om te laten zien wat er was voordat er een verwijdering plaatsvond (voor het geval er vragen zijn).
SQL > maak tabel alan.names_backup als selecteer * uit namen; Tabel gemaakt.