Oracle
 sql >> Base de données >  >> RDS >> Oracle

supprimer les lignes en double d'Oracle

Nous devons souvent rechercher et supprimer des lignes en double de la table oracle pour de nombreuses raisons dans la base de données. Nous devons souvent supprimer pour résoudre les problèmes de données. Il existe de nombreuses façons d'oracle supprimer les lignes en double tout en conservant l'original. Je montrerais quelques méthodes plus rapides pour y parvenir dans cet article. Je vais montrer la méthode où rowid est utilisé et la méthode où rowid n'est pas utilisé. Veuillez noter que vous devez  identifier toutes les colonnes  qui font de la ligne un doublon dans la table et spécifier toutes ces colonnes dans l'instruction de suppression appropriée en SQL

Comment supprimer les lignes en double d'Oracle

Voici quelques façons de supprimer facilement les lignes en double

(A) Méthode rapide mais vous devez recréer tous les index et déclencheurs Oracle

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

Exemple

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) Comment rechercher et supprimer des enregistrements en double dans Oracle à l'aide de rowid. L'exemple ci-dessous montre une colonne. Si vous avez une suppression basée sur deux colonnes, vous pouvez spécifier deux colonnes

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

(C)   Utiliser l'auto-jointure oracle pour supprimer les lignes en double

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

(D) Utiliser la clause existe

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) supprimer les enregistrements en double à l'aide des fonctions analytiques d'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
)

Ainsi, comme indiqué, il existe de nombreuses façons de supprimer les lignes en double dans les tables.Ces commandes peuvent être utiles dans de nombreuses situations et peuvent être utilisées en fonction des besoins.Veuillez toujours vous assurer que nous disposons d'une sauvegarde avant d'exécuter des instructions. Nous devrions également d'abord trouver le doublon à l'aide de la requête, puis le vérifier avant de le valider

comment trouver des enregistrements en double dans oracle en utilisant rowid

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

Donc, trouvez d'abord le doublon à l'aide de la requête ci-dessus, puis supprimez-le et le nombre de suppressions doit être le même que le nombre de lignes de la requête ci-dessus. Maintenant, exécutez à nouveau la requête de recherche de doublons. S'il n'y a pas de doublon, nous sommes prêts à valider

Veuillez consulter l'article ci-dessous pour  avoir une plongée approfondie dans Sql

Tutoriels Oracle SQL :Contient la liste de tous les articles Oracle SQL utiles. Explorez-les pour en savoir plus sur Oracle Sql même si vous connaissez Oracle Sql. br/>clause where dans oracle :restriction de l'ensemble de données, clause where, clause what is where dans l'instruction sql, fonctions de ligne unique de l'opérateur de comparaison dans Oracle :consultez ceci pour découvrir les fonctions de ligne unique dans sql, données Oracle fonctions,Fonctions numériques en sql,Fonction de caractère en sql
requêtes sql oracle
blog.oracle.com