Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
973 connectés 

  FORUM HardWare.fr
  Programmation

  [SQL] Suppression de doublons

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SQL] Suppression de doublons

n°183506
PatBasi
Posté le 26-07-2002 à 12:18:57  profilanswer
 

N'étant pas très expérimenté (ni doué :??: ) je bricole
 
Donc je peux y arriver mais je trouve que ma méthode est un peu lourde (je recherche les doublons; je mets leur indice en négatif; pour chaque série de doublons je recherche l'indice min et le remets en positif; finalement je supprime toutes les entrées dont l'indice est négatif).
 
N'y aurait-il pas plus simple et léger?

mood
Publicité
Posté le 26-07-2002 à 12:18:57  profilanswer
 

n°183516
Mara's dad
Yes I can !
Posté le 26-07-2002 à 12:39:12  profilanswer
 

C'est quoi la structure de ta table ?
 
Y'a un champ ID ?
 
Cà doublonne sur quoi ?
 
C'est quelle base SQL ?


Message édité par Mara's dad le 26-07-2002 à 12:39:35

---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°183523
PatBasi
Posté le 26-07-2002 à 12:52:53  profilanswer
 

Je bosse sous Access mais je travaille sur deux table liées par un indice: une table Access (d'appels) et une table (de références clients) qui est un lien vers une db5.
 
Dans les tables existe une floppée de champs; mais les doublons que je recherche sous 100% identiques à l'exception de l'indice qui est incrémenté à chaque ajout (en fait un logiciel extérieur peut créer dans ces tables des entrées identiques à plusieurs reprises et moi je passe derrière pour nettoyer)
 
J'espère que ma présentation est assez claire.
 
Et merci pour l'aide :)


Message édité par PatBasi le 26-07-2002 à 12:55:20
n°183527
irulan
Posté le 26-07-2002 à 13:06:16  profilanswer
 

Pourrais-tu donner les structures des tables en indiquant les champs qui sont différents et les champs identiques dans le cas des doublons ?
 
J'ai du mal à comprendre : tes doublons sont dans qielle table ?
 
Tu utilises quelle type de base de données (Access, MySQL, Oracle, ...) ?


Message édité par irulan le 26-07-2002 à 13:06:29
n°183545
PatBasi
Posté le 26-07-2002 à 13:22:48  profilanswer
 

Hehe
 
Table appels: un champ indice; et les autres
Table client: un champ indice; et les autres
 
appels et clients sont liés par l'indice
 
Pour simplifier il faut considérer qu'il n'y a k'une grosse table.
 
Et je recherche les doublons sur tous les champs mis à part l'indice
 
 
Exemle:
************************************
Indice     Champ1     Champ2_....
1           bob          truc
2           blabla       cahuète
3           bob          truc
4           bob          MACHIN!!!!
************************************
Dans cet exemple comme les lignes 1 et 3 sont identiques sur tous les autres champs que l'indice, j'aimerais qu'il en supprime une des deux


Message édité par PatBasi le 26-07-2002 à 13:23:55
n°183554
irulan
Posté le 26-07-2002 à 13:37:10  profilanswer
 

Bon tu peux essayer un truc du genre :
 
SELECT champ1, champ2, COUNT(indice)
from MaTable
GROUP BY champ1,champ2
HAVING COUNT(indice) > 1;
 
Ce bout de code est valable pour une seule table, à toi de l'adapter pour deux tables.
Ca te permet de selectionner les lignes en doublon.


Message édité par irulan le 26-07-2002 à 13:38:15
n°183560
irulan
Posté le 26-07-2002 à 13:40:07  profilanswer
 

Pour effacer, il faudrait ne sélectionner que la première des lignes de chaque doublon (par exemple sous Oracle, utiliser ROWNUMBER < 2, mais bon comme tu n'as toujours pas précisé ton SGBD...)


Message édité par irulan le 26-07-2002 à 13:40:30
n°183583
PatBasi
Posté le 26-07-2002 à 14:12:35  profilanswer
 

Merci pour ton aide :)  
 
Et j'ai dit que j'étais sous Access (zè pas le choix =/ )
 
De plus quand je dis doublons cela peut monter à plus de deux (je peux très bien avoir 10 enregistrements identiques mais d'indice différent)
 
Mais ne t'emb^te pas trop la base n'est pas très grosse et si la méthode n'est très optimisé je survivrai à cela (c juste ke j'aime bien faire les choses correctement :sol: ).

n°183643
irulan
Posté le 26-07-2002 à 14:53:48  profilanswer
 

Autant pour moi, je n'avais pas capté que tu étais sous Access.
 
Enfin ça ne fait rien, le Select est valable sous Access je pense (c'est du SQL standard).
 
Sinon, le select avec le group by te renvoie en fait toutes les valeurs qui ont plus d'une occurrence (donc à partir de 2 et + )

n°183819
PatBasi
Posté le 26-07-2002 à 17:51:57  profilanswer
 

Select et group by, ya pa de problème
 
Or si je ne me trompe pas là tu ne m'exposes que la sélection des doublons (et de tous les enregistrements amors qu'il ke j'en garde 1)
 
En fait la sélection c ok (je savais faire, et même la suppression mais de manière assez lourde)
 
J'essayais juste de faire plus simple pour supprimer tous les enregistrements surnuméraires. Mais comme je te disais ne te prends pas trop la tête, il n'y a rien de vital (ce ki ne veut pas dire que je cherche à te décourager de m'aider; ton aide et le temps que tu me consacres sont fortement appréciés  :jap: -sans parler du zeste de patience vu comment je suis embêtant ;) -).

mood
Publicité
Posté le 26-07-2002 à 17:51:57  profilanswer
 

n°184075
Mara's dad
Yes I can !
Posté le 26-07-2002 à 23:45:34  profilanswer
 

Attention, çà va faire mal !
 

Code :
  1. DELETE
  2. indice
  3. FROM
  4. appels
  5. WHERE
  6. indice Not In
  7.  ( SELECT first( A.indice )
  8.   FROM appels As A
  9.   GROUP BY c1,c2,c3
  10.   HAVING Count(*)>1  And A.c2 = appels.c2 And A.c3 = appels.c3
  11.  )
  12. AND c1 In
  13.  ( SELECT B.c1
  14.   FROM appels As B
  15.   GROUP BY c1,c2,c3
  16.   HAVING Count(*)>1  And B.c2 = appels.c2 And B.c3 = appels.c3
  17.  );


 
Le tout en une seule requête !
 
Le but est de garder celui de plus faible indice parmis les records qui ont des doublons.


Message édité par Mara's dad le 26-07-2002 à 23:46:23

---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°184124
PatBasi
Posté le 27-07-2002 à 00:51:04  profilanswer
 

J'aime quand on me fait mal comme çà :hap:  
 
Merci beaucoup :jap:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [SQL] Suppression de doublons

 

Sujets relatifs
Requete SQL... Traiter les données directement dans la requete[MySQL] Insertion massive d?info SQL situé dans un fichier sur le serv
Comment récupérer les accents d'une requete SQL (oracle) ?SQL - Génération dynamique close from ...
Se connecter à une base SQL[SQL] Probleme avec un "update" alambiqué...
DBGrid et requêtes SQLComment affecter des paramètres à une commandes SQL dans un DataEnv. ?
SQL et Visual Basic[SQL] pb requête -> ...
Plus de sujets relatifs à : [SQL] Suppression de doublons


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR