sql >> Databáze >  >> RDS >> Oracle

odstranit duplicitní řádky z Oracle

Z mnoha důvodů v databázi často potřebujeme najít a odstranit duplicitní řádky z tabulky Oracle. Potřebujeme mazat, abychom často odstranili problémy s daty. Existuje mnoho způsobů, jak Oracle odstranit duplicitní řádky, ale zachovat původní . V tomto příspěvku bych předvedl několik rychlejších metod, jak toho dosáhnout. Ukážu metodu, kde se používá rowid a metodu, kde se nepoužívá. Vezměte prosím na vědomí, že musíte  identifikovat všechny sloupce,  které z řádku dělají duplikát v tabulce  a všechny tyto sloupce zadat v příslušném příkazu delete v SQL

Jak odstranit duplicitní řádky z Oracle

Zde jsou některé ze způsobů, jak snadno odstranit duplicitní řádky

(A) Rychlá metoda, ale musíte znovu vytvořit všechny věštecké indexy, spouštěče

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

Příklad

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) Jak najít a odstranit duplicitní záznamy v oracle pomocí rowid. Níže uvedený příklad ukazuje jeden sloupec. Pokud jste odstranili na základě dvou sloupců, můžete zadat dva sloupce

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

(C)   K odstranění duplicitních řádků použijte oracle self-join

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

(D) Ustanovení o použití existuje

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) smazat duplicitní záznamy při používání analytických funkcí oracle

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
)

Jak je tedy ukázáno, existuje mnoho způsobů, jak odstranit duplicitní řádky v tabulkách. Tyto příkazy mohou být užitečné v mnoha situacích a lze je použít v závislosti na požadavcích. Před provedením jakýchkoli příkazů se vždy ujistěte, že máme k dispozici zálohu. Měli bychom také nejprve najít duplikát pomocí dotazu a poté jej ověřit před jeho odevzdáním

jak najít duplicitní záznamy v oracle pomocí rowid

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

Nejprve tedy najděte duplikát pomocí výše uvedeného dotazu, poté jej smažte a počet smazání by měl být stejný jako počet řádků dotazu výše. Nyní  spusťte dotaz k nalezení duplicitního dotazu znovu. Pokud žádný duplikát není, jsme pro potvrzení

Podívejte se prosím na níže uvedený článek, kde se  hloubkově ponoříte do Sql

Výukové programy Oracle Sql:Obsahuje seznam všech užitečných článků Oracle SQL. Prozkoumejte je, abyste se dozvěděli o Oracle Sql, i když znáte Oracle Sql
Otázky k pohovoru s Oracle:Podívejte se na tuto stránku, kde najdete 49 nejčastějších otázek a odpovědí na pohovor Oracle:Základy, Oracle SQL, které vám pomohou při pohovorech. K dispozici je také další materiál
klauzule where v oracle :Omezení datové sady, klauzule where, klauzuli co je kde v příkazu SQL, porovnávací operátor
jednořádkové funkce v Oracle:Podívejte se na toto a zjistěte jednořádkové funkce v sql, data Oracle funkce,Číselné funkce v sql ,Znaková funkce v sql
dotazy Oracle sql
blog.oracle.com


  1. DBCA Create Database špatný REMOTE_LISTENER

  2. Výukový program SQL JOINs s příklady

  3. Výběr databáze pro vytvoření dvou propojených tabulek?

  4. Dotaz, který vrací hierarchický seznam typů událostí spouštění na serveru SQL