sql >> Databasteknik >  >> RDS >> Oracle

ta bort dubbletter av rader från Oracle

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


  1. Hur SQRT() fungerar i MariaDB

  2. PostgreSQL komprimerade arkivloggar i Windows

  3. Hur man kontrollerar om en tabell finns i SQLite

  4. Refererar du till Oracle användardefinierade typer över DBLINK?