Oracle
 sql >> база данни >  >> RDS >> Oracle

изтрийте дублиращи се редове от Oracle

Често се налага да намираме  и изтриваме дублиращи се редове от таблицата на Oracle поради много причини в базата данни. Трябва често да изтриваме, за да изчистим проблемите с данните. Има много начини за изтриване на дублиращи се редове, но запазване на оригинала. В тази публикация ще покажа няколко по-бързи метода за постигане на това. Ще покажа метода, при който се използва rowid и метода, при който rowid не се използва. Моля, имайте предвид, че трябва  да идентифицирате всички колони, които правят реда дубликат в таблицата и да посочите всички тези колони в съответния израз за изтриване в SQL

Как да изтрия дублиращи се редове от Oracle

Ето някои от начините да изтриете дублиращи се редове по лесен начин

(A) Бърз метод, но трябва да пресъздадете всички индекси на оракул, тригери

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

Пример

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) Как да намерите и изтриете дублиращи се записи в oracle с помощта на rowid. Примерът по-долу показва една колона. Ако имате изтриване въз основа на две колони, можете да посочите две колони

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

(C)   Използвайте самостоятелното присъединяване на Oracle, за да изтриете дублиращи се редове

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

(D) Клауза за използване съществува

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) изтриване на дублиращи се записи при използване на аналитични функции на 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
)

Така че, както е показано, има много начини за изтриване на дублиращи се редове в таблиците. Тази команда може да бъде удобна в много ситуации и може да се използва в зависимост от изискването. Моля, винаги се уверете, че имаме резервно копие, преди да изпълните каквито и да било изрази. Също така първо трябва да намерим дубликата с помощта на заявката и след това да го проверим, преди да го изпълним

как да намерите дублиращи се записи в oracle с помощта на rowid

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

Така че първо намерете дубликата с помощта на горната заявка, след това го изтрийте и броят на изтриването трябва да е същият като броя на редовете на заявката по-горе. Сега  изпълнете отново заявката за намиране на дубликат. Ако няма дубликат, тогава сме добри за ангажимент

Моля, вижте статията по-долу, за  задълбочено потапяне в Sql

Уроци за Oracle Sql:Съдържа списъка с всички полезни статии за Oracle sql. Разгледайте ги, за да научите за Oracle Sql, дори ако познавате Oracle Sql
Въпроси за интервю за Oracle :Вижте тази страница за 49-те най-добри въпроси и отговори за интервюта с Oracle:Основи, Oracle SQL, за да ви помогне в интервютата. Предоставя се и допълнителен материал
where клауза в oracle :Ограничаване на набора от данни, клауза where, клауза what is where в sql израз, оператор за сравнение
функции на един ред в Oracle :Вижте това, за да разберете едноредови функции в sql, Oracle данни функции,Числови функции в sql ,Символна функция в sql
oracle sql заявки
blog.oracle.com


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle:зареждане на голям xml файл?

  2. Обяснение на оператора Oracle MINUS

  3. Java Multicast Time To Live винаги е 0

  4. Статичен срещу динамичен sql

  5. SQL формат на датата