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