Bonjour, j'ai une table qui contient des doublons, j'aimerai supprimer les doublons en gardant le Id le plus petit, voici un exemple
je veux garder seulement ID = 20,
NB : ça c'est à titre d'exemple il y a centaine de ligne en doublon
Merci
Bonjour, j'ai une table qui contient des doublons, j'aimerai supprimer les doublons en gardant le Id le plus petit, voici un exemple
je veux garder seulement ID = 20,
NB : ça c'est à titre d'exemple il y a centaine de ligne en doublon
Merci
Bonjour,
Tu peux utiliser une jointure dans la requête de suppression :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 delete t1 from MaTable t1 inner join MaTable t2 on (les critères pour trouver les doublons) and t1.id > t2.id
Tatayo.
Merci de me répondre,
j'utilise TOAD 15 pour lancer le script mais on dirait qu'il indique une erreur sur FROM
si j'insiste pour le lancer voici l'erreur
ORA-00933: la commande SQL ne se termine pas correctement
voici une capture
Visiblement Oracle n'aime pas les jointures avec un DELETE.
Dans ce cas un EXIST fera l'affaire:
Ou avec un IJ:
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 delete from Matable t1 where exists ( select 1 from MaTable t2 on (les critères pour trouver les doublons) and t1.id > t2.id )
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 delete from Matable t1 where t1.id in ( select t1.id from MaTable t2 on (les critères pour trouver les doublons) and t1.id > t2.id )
Tatayo.
bonjour,
j'ai essayé les deux mais il y a une erreur sur ON
Non mais....
Il y a une coquille dans la requête proposée par Tatayo (remplacer ON par WHERE)
il ne faut pas coder :
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 delete from Matable T1 where exists (select 1 from MaTable T2 on (les critères pour trouver les doublons) and T1.id > T2.id )
Mais :
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 delete from Matable T1 where exists (select 1 from MaTable T2 where (les critères pour trouver les doublons) and T1.id > T2.id )
Par exemple :
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 delete from Matable T1 where exists (select 1 from MaTable T2 where T2.COL_B=T1.COL_B and T2.COL_C=T1.COL_C and T1.id > T2.id )
Les critères qui permettent de déterminer les doublons sont à adapter à vos besoins.
Si par doublons vous voulez dire doublons dans les colonnes col_b, col_c, col_d, etc.. voici une manière de procéder
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 create table t as with t as (select 20 id, 136 col_b, 89 col_c, '036/2021' col_e from dual union all select 549 id, 136 col_b, 89 col_c, '036/2021' col_e from dual union all select 1460 id, 136 col_b, 89 col_c, '036/2021' col_e from dual ) select * from t; SQL> select * from t; ID COL_B COL_C COL_E ---------- ---------- ---------- -------- 20 136 89 036/2021 549 136 89 036/2021 1460 136 89 036/2021 SQL> delete from t where id not in (select min(id) from t group by col_b,col_c,col_e); 2 rows deleted. SQL> select * from t; ID COL_B COL_C COL_E ---------- ---------- ---------- -------- 20 136 89 036/2021
Ceci suppose que les colonnes col_b, col_c et col_e ne peuvent pas être NULL
Bien Cordialement
Mohamed Houri
Si le volume de données à supprimer est faible comparativement à la taille de la table (disons moins de 0,1% au doigt mouillé), j'aime bien passer par les rowid :
J'ai mis quelques données ici : https://dbfiddle.uk/dAI07O6i
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 delete from MaTable where rowid in (select rid from (select rowid as rid , row_number() over(partition by col_B , col_C , col_D , col_E , col_F , col_G , col_H , col_I , col_J , col_K order by ID asc) as rn from MaTable) where rn > 1);
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager