sql >> Database teknologi >  >> RDS >> Oracle

slet dublerede rækker fra Oracle

Vi er ofte nødt til at finde og slette duplikerede rækker fra Oracle-tabellen på grund af mange årsager i databasen. Vi er nødt til at slette for at fjerne dataproblemerne ofte. Der er mange måder at slette duplikerede rækker på, men behold originalen. Jeg ville vise nogle  hurtigere metoder til at opnå det i dette indlæg. Jeg vil vise metoden hvor rowid bruges og metode hvor rowid ikke bruges. Bemærk venligst, at du skal  identificere alle de kolonner  der gør rækken til en dublet i tabellen  og angive alle disse kolonner i den relevante delete-sætning i SQL

Sådan sletter du dublerede rækker fra Oracle

Her er nogle af måderne til at slette duplikerede rækker på en nem måde

(A) Hurtig metode, men du skal genskabe alle orakelindekser, triggere

create table my_table1 as select distinct * from my_table;
drop my_table;
rename my_table1 to my_table;

Eksempel

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) Sådan finder og sletter du dublerede poster i oracle ved hjælp af rowid. Nedenstående eksempel viser en kolonne. Hvis du har slettet baseret på to kolonner, kan du angive to kolonner

Delete from my_table where rowid not in (
select max(rowid) from my_table group by my_col_name );

(C)   Brug Oracle-selv-join til at slette dublerede rækker

DELETE FROM my_table A WHERE ROWID > (SELECT min(rowid) FROM my_table B WHERE A.key_values = B.key_values);

(D) Brug eksisterer 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) slet duplikerede poster ved at bruge oracle analytiske 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 vist er der  mange måder at slette duplikerede rækker i tabellerne på. Disse kommandoer kan være nyttige i mange situationer og kan bruges afhængigt af kravet. Sørg altid for, at vi har backup tilgængelig, før du udfører nogen sætninger. Vi bør også først finde duplikatet ved hjælp af forespørgslen og derefter bekræfte det, før vi begår det

hvordan man finder duplikerede poster i Oracle ved hjælp af rowid

select * from my_table
where rowid not in
(select max(rowid) from my_table group by column_name);

Så find først duplikatet ved hjælp af ovenstående forespørgsel, slet det og sletningsantallet skal være det samme som rækkeantallet af forespørgslen ovenfor. Kør nu find dubletforespørgslen igen. Hvis der ikke er nogen dublet, er vi gode til at forpligte

Se venligst nedenstående artikel for at  dykke i Sql

Oracle Sql tutorials:Indeholder listen over alle de nyttige Oracle sql artikler. Udforsk dem for at lære om Oracle SQL, selvom du kender Oracle SQL
Oracle-interviewspørgsmål :Tjek denne side for de 49 bedste Oracle-interviewspørgsmål og -svar:Grundlæggende , Oracle SQL til at hjælpe dig i interviews.Der findes også yderligere materiale
where-sætning i Oracle :Begrænsning af datasættet, where-sætning, hvad er where-sætning i sql-sætning, sammenligningsoperatørens
enkeltrække-funktioner i Oracle:Tjek dette for at finde ud af Enkeltrække-funktioner i sql, Oracle-data funktioner,Numeriske funktioner i sql,Tegnfunktion i sql
oracle sql-forespørgsler
blog.oracle.com


  1. Kan ikke oprette forbindelse til Oracle-databasen ved hjælp af JDBC, hvis adgangskoden har specialtegn

  2. Hvordan kan jeg manipulere MySQL fuldtekst søgerelevans for at gøre et felt mere 'værdifuldt' end et andet?

  3. Hvad er forskellen mellem Scope_Identity(), Identity(), @@Identity og Ident_Current()?

  4. 3 måder at udtrække måneden fra en dato i SQL Server (T-SQL)