SUPPRESSION DE DOUBLONS

cs_petifa Messages postés 215 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 10 mars 2014 - 13 oct. 2008 à 17:20
dymsbess Messages postés 56 Date d'inscription mercredi 29 septembre 2004 Statut Membre Dernière intervention 4 janvier 2010 - 3 juin 2009 à 18:34
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/48203-suppression-de-doublons

dymsbess Messages postés 56 Date d'inscription mercredi 29 septembre 2004 Statut Membre Dernière intervention 4 janvier 2010 1
3 juin 2009 à 18:34
Tu peux aussi utiliser la tâche "Regroupement probable" dans SSIS.

http://www.xoowiki.com
cs_exar Messages postés 286 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 22 avril 2012 1
30 mars 2009 à 11:16
Hello !

Attention qu'un distinct est coûteux en temps: il faut effectuer un sort unique... S'il y a un order by dans la query, on trie une seconde fois.
De plus, s'il y a des doublons, c'est qu'il y a un problème au niveau du datamodel...
dmuller Messages postés 6 Date d'inscription vendredi 19 août 2005 Statut Membre Dernière intervention 10 juin 2011
30 mars 2009 à 09:47
En quoi est-ce plus compliqué ?

Si vous voulez gérer le distinct sur "", remplacer le par n'importe quelle valeur bidon :
SELECT DISTINCT DECODE(colonne_a_traiter, '', '@@@@', colonne_a_traiter)
FROM table_a_traiter;

Si vous voulez gérer le distinct sur la valeur NULL, remplacer la par n'importe quelle valeur bidon :
SELECT DISTINCT NVL(colonne_a_traiter, '@@@@')
FROM table_a_traiter;

En espérant vous avoir été utile.
hicham1965 Messages postés 1 Date d'inscription jeudi 26 juillet 2007 Statut Membre Dernière intervention 29 mars 2009
28 mars 2009 à 14:48
oui julien39,

c facile avec "distinct" pour "select distinct champ from table"

mais pour : ""
SELECT Distinct Formation.N_CIN, Personnel.DOTI, Personnel.nom_prenom, Personnel.Service, Formation.Lieu_Formation FROM Formation INNER JOIN Personnel ON Formation.N_CIN=Personnel.cin;
"

ca devient compliqué
cs_exar Messages postés 286 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 22 avril 2012 1
9 mars 2009 à 14:15
Je ne sais pas si ça fonctionne avec d'autres SGBD's, mais avec Oracle, il suffit de faire:

DELETE FROM
MaTable A
WHERE
A.rowid >
ANY (SELECT B.rowid
FROM
MaTable B
WHERE
(A.col1 = B.col1 OR (A.col1 is null AND B.col1 is null))
AND
(A.col2 = B.col2 OR (A.col2 is null AND B.col2 is null))
)
;

Ou encore:

delete from
MaTable
where rowid in
(select rowid from
(select
rowid,
row_number()
over
(partition by col1 order by col1) dup
from MaTable)
where dup > 1);
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
20 nov. 2008 à 17:48
Oui, étonnant d'aller chercher aussi loin alors qu'un simple DISTINCT suffit !!!
dmuller Messages postés 6 Date d'inscription vendredi 19 août 2005 Statut Membre Dernière intervention 10 juin 2011
20 oct. 2008 à 11:56
Solution bien compliquée pour faire cela :

CREATE TABLE table_sans_doublon
AS SELECT DISTINCT colonne_doublons
FROM table_avec_doublons;
cs_petifa Messages postés 215 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 10 mars 2014
13 oct. 2008 à 17:20
oki, ça peut être utile...
thx
Rejoignez-nous