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