Om verschillende redenen in de database moeten we vaak dubbele rijen uit de Oracle-tabel vinden en verwijderen. We moeten vaak verwijderen om de gegevensproblemen op te lossen. Er zijn veel manieren om dubbele rijen te orakelen, maar origineel te houden. Ik zou in dit bericht een paar snellere methoden laten zien om dit te bereiken. Ik zal de methode laten zien waarbij rowid wordt gebruikt en de methode waarbij rowid niet wordt gebruikt. Houd er rekening mee dat u alle kolommen moet identificeren die de rij een duplicaat maken in de tabel en al die kolommen moet specificeren in de juiste delete-instructie in SQL
Dubbele rijen verwijderen uit Oracle
Hier zijn enkele manieren om dubbele rijen op een gemakkelijke manier te verwijderen
(A) Snelle methode, maar je moet alle orakelindexen, triggers opnieuw maken
create table my_table1 as select distinct * from my_table; drop my_table; rename my_table1 to my_table;
Voorbeeld
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) Hoe dubbele records in orakel te vinden en te verwijderen met rowid. Het onderstaande voorbeeld toont één kolom. Als u verwijderen op basis van twee kolommen heeft, kunt u twee kolommen specificeren
Delete from my_table where rowid not in ( select max(rowid) from my_table group by my_col_name );
(C) Gebruik oracle self-join om dubbele rijen te verwijderen
DELETE FROM my_table A WHERE ROWID > (SELECT min(rowid) FROM my_table B WHERE A.key_values = B.key_values);
(D) Gebruik bestaat clausule
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) dubbele records verwijderen bij het gebruik van orakelanalysefuncties
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 )
Zoals weergegeven, zijn er veel manieren om dubbele rijen in de tabellen te verwijderen. Deze opdracht kan in veel situaties van pas komen en kan worden gebruikt, afhankelijk van de vereiste. Zorg er altijd voor dat we een back-up beschikbaar hebben voordat u instructies uitvoert. We moeten ook eerst het duplicaat vinden met behulp van de zoekopdracht en deze vervolgens verifiëren voordat we deze uitvoeren
hoe dubbele records in oracle te vinden met rowid
select * from my_table
where rowid not in
(select max(rowid) from my_table group by column_name);
Dus zoek eerst het duplicaat met behulp van de bovenstaande zoekopdracht en verwijder deze vervolgens. Het aantal verwijderingen moet hetzelfde zijn als het aantal rijen van de bovenstaande zoekopdracht. Voer nu de zoekopdracht duplicaat opnieuw uit. Als er geen duplicaat is, zijn we goed voor commit
Bekijk het onderstaande artikel om een diepe duik te nemen in Sql
Oracle Sql-zelfstudies:Bevat de lijst met alle nuttige Oracle SQL-artikelen. Verken ze om meer te weten te komen over Oracle Sql, zelfs als u Oracle Sql kent
Oracle-interviewvragen:bekijk deze pagina voor de top 49 Oracle-interviewvragen en -antwoorden:basisprincipes, Oracle SQL om u te helpen bij interviews. Er wordt ook aanvullend materiaal verstrekt
br/>where-clausule in orakel:beperking van de dataset, waar-clausule, wat is waar-clausule in sql-instructie, vergelijkingsoperator
enkele rij-functies in Oracle:bekijk dit om erachter te komen Enkele rij-functies in sql, Oracle-gegevens functies,Numerieke functies in sql ,Tekenfunctie in sql
oracle sql-query's
blog.oracle.com