Maison > base de données > Oracle > le corps du texte

Comment supprimer les données en double dans Oracle

coldplay.xixi
Libérer: 2023-01-13 00:40:17
original
52589 Les gens l'ont consulté

Comment supprimer les données en double dans Oracle : 1. Recherchez toutes les lignes en double pour la colonne spécifiée et supprimez-les. La méthode consiste à compter ; 2. Supprimez toutes les lignes en double. Le code est [supprimer de nayi224_180824 t où. t.rowid dans].

Comment supprimer les données en double dans Oracle

L'environnement d'exploitation de cet article : système Windows 7, version oracle9i, ordinateur Dell G3.

Recommandé (gratuit) : base de données Oracle

Oracle supprime les données en double Méthode :

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_180824select 1, 2, 3 from dual union allselect 1, 2, 3 from dual union allselect 5, 2, 3 from dual union allselect 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érifier le résultat défini après la déduplication

distinct

select distinct t1.* from nayi224_180824 t1;
Copier après la connexion
COL_1COL_2COL_3
102030
123
523

La méthode 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 façon la plus simple et la plus facile d'écrire.

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
1231
1020301

C'est beaucoup plus compliqué à é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
123
123
523

Vérifiez deux fois le tableau, le l'efficacité sera moindre. Non recommandé.

comptez plus

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
1233
1233
5233

Ne vérifiez le tableau qu'une seule 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". Le

groupe par

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

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

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:php.cn
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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!