Vi behöver ofta hitta och ta bort dubbletter av rader från Oracle-tabellen på grund av många anledningar i databasen. Vi måste radera för att rensa bort dataproblemen ofta. Det finns många sätt att ta bort dubbletter av orakelrader men behåll originalet. Jag skulle visa upp några snabbare metoder för att uppnå det i det här inlägget. Jag kommer att visa metoden där rowid används och metod där rowid inte används. Observera att du måste identifiera alla kolumner som gör raden till en dubblett i tabellen och ange alla dessa kolumner i lämplig delete-sats i SQL
Hur man tar bort dubbletter av rader från Oracle
Här är några av sätten att ta bort dubbletter av rader på ett enkelt sätt
(A) Snabb metod men du måste återskapa alla orakelindex, triggers
create table my_table1 as select distinct * from my_table; drop my_table; rename my_table1 to my_table;
Exempel
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) Hur man hittar och tar bort dubbletter av poster i Oracle med hjälp av rowid. Exemplet nedan visar en kolumn. Om du har raderat baserat på två kolumner kan du ange två kolumner
Delete from my_table where rowid not in ( select max(rowid) from my_table group by my_col_name );
(C) Använd oracle self-join för att ta bort dubbletter av rader
DELETE FROM my_table A WHERE ROWID > (SELECT min(rowid) FROM my_table B WHERE A.key_values = B.key_values);
(D) Använd existerar klausul
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) ta bort dubbletter av poster när du använder oracle analytiska funktioner
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 )
Så som visas finns det många sätt att ta bort dubbletter av rader i tabellerna. Dessa kommandon kan vara praktiska i många situationer och kan användas beroende på kravet. Se alltid till att vi har en säkerhetskopia tillgänglig innan du kör några uttalanden. Vi bör också först hitta dubbletten med hjälp av frågan och sedan verifiera den innan vi utför den
hur man hittar dubbletter av poster i Oracle med hjälp av rowid
select * from my_table
where rowid not in
(select max(rowid) from my_table group by column_name);
Så hitta först dubbletten med ovanstående fråga, ta sedan bort den och borttagningsantalet bör vara detsamma som radantalet för frågan ovan. Kör nu sökfrågan Sök efter dubblett igen. Om ingen dubblett är vi bra för commit
Se artikeln nedan för att göra en djupdykning i Sql
Oracle SQL tutorials :Innehåller listan över alla användbara Oracle SQL-artiklar. Utforska dem för att lära dig om Oracle SQL även om du kan Oracle SQL
Oracle-intervjufrågor :Kolla in den här sidan för de 49 bästa Oracle-intervjufrågorna och svaren :Grunderna , Oracle SQL för att hjälpa dig i intervjuer. Ytterligare material tillhandahålls också
where-sats i oracle :Begränsning av datamängden, where-sats, what is where-sats i SQL-satsen, jämförelseoperatorns
enradsfunktioner i Oracle :Kolla in detta för att ta reda på Enkelradsfunktioner i sql, Oracle-data funktioner,Numeriska funktioner i sql ,Teckenfunktion i sql
oracle sql-frågor
blog.oracle.com