Maison > base de données > Oracle > Résumer et organiser les méthodes courantes pour supprimer les données en double de la base de données Oracle

Résumer et organiser les méthodes courantes pour supprimer les données en double de la base de données Oracle

WBOY
Libérer: 2022-08-22 17:59:30
avant
3387 Les gens l'ont consulté

Cet article vous apporte des connaissances pertinentes sur Oracle Il présente principalement les données en double dans le tableau qui sont souvent supprimées lors du nettoyage des données. Alors, comment les gérer dans Oracle ? Jetons-y un coup d'œil ensemble, j'espère que cela sera utile à tout le monde.

Résumer et organiser les méthodes courantes pour supprimer les données en double de la base de données Oracle

Tutoriel recommandé : "Tutoriel vidéo Oracle"

Créer des données de test

create table nayi224_180824(col_1 varchar2(10), col_2 varchar2(10), col_3 varchar2(10));
insert into nayi224_180824
select 1, 2, 3 from dual union all
select 1, 2, 3 from dual union all
select 5, 2, 3 from dual union all
select 10, 20, 30 from dual ;
commit;
select*from nayi224_180824;
Copier après la connexion
COL_1COL_2COL_3
123
123
523
102030

Pour la colonne spécifiée, vérifiez les doublons Ensemble de résultats

distinct

select distinct t1.* from nayi224_180824 t1;
Copier après la connexion
La méthode
COL_1COL_2COL_3
102030
12 3
523

est très limitée car elle ne peut dédupliquer que toutes les colonnes de requête. Si je souhaite dédupliquer col_2 et col3, alors mon jeu de résultats ne peut avoir que les colonnes col_2 et col_3, mais pas col_1.

select distinct t1.col_2, col_3 from nayi224_180824 t1
Copier après la connexion
COL_2COL_3
23
2030

Mais c’est aussi la manière d’écrire la plus simple et la plus facile à comprendre.

row_number()

select *
  from (select t1.*,
               row_number() over(partition by t1.col_2, t1.col_3 order by 1) rn
          from nayi224_180824 t1) t1
 where t1.rn = 1
;
Copier après la connexion
COL_1COL_2COL_3RN
123 1
102030 1

C'est beaucoup plus difficile à écrire, mais il a une plus grande flexibilité.

Pour la colonne spécifiée, recherchez toutes les lignes en double

comptez avoir

select *
  from nayi224_180824 t
 where (t.col_2, t.col_3) in (select t1.col_2, t1.col_3
                                from nayi224_180824 t1
                               group by t1.col_2, t1.col_3
                              having count(1) > 1)
Copier après la connexion
COL_1COL_2COL_3
12 3
12 3
523

Vous devez vérifier la table deux fois, donc l'efficacité sera faible. Non recommandé.

compte terminé

select *
  from (select t1.*,
               count(1) over(partition by t1.col_2, t1.col_3) rn
          from nayi224_180824 t1) t1
 where t1.rn > 1
;
Copier après la connexion
COL_1COL_2COL_3RN
123 3
1233
5233

Il suffit de vérifier le tableau une fois, recommandé.

Supprimez toutes les lignes en double

delete from nayi224_180824 t
 where t.rowid in (
                   select rid
                     from (select t1.rowid rid,
                                   count(1) over(partition by t1.col_2, t1.col_3) rn
                              from nayi224_180824 t1) t1
                    where t1.rn > 1);
Copier après la connexion

Modifiez simplement légèrement l'instruction ci-dessus.

Supprimez les données en double et conservez-en une

Méthode de fonction analytique

delete from nayi224_180824 t
 where t.rowid in (select rid
                     from (select t1.rowid rid,
                                  row_number() over(partition by t1.col_2, t1.col_3 order by 1) rn
                             from nayi224_180824 t1) t1
                    where t1.rn > 1);
Copier après la connexion

a la grande flexibilité constante des fonctions analytiques. Vous pouvez faire ce que vous voulez avec le regroupement et modifier la clause orderby pour répondre à des exigences telles que "conserver l'identifiant maximum".

group by

delete from nayi224_180824 t
 where t.rowid not in
       (select max(rowid) from nayi224_180824 t1 group by t1.col_2, t1.col_3);
Copier après la connexion

a sacrifié une certaine flexibilité en échange d'une plus grande efficacité.

Tutoriel recommandé : "Tutoriel vidéo Oracle"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:jb51.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal