Suppression de doublons [SQL] - Programmation
Marsh Posté le 26-07-2002 à 12:39:12
C'est quoi la structure de ta table ?
Y'a un champ ID ?
Cà doublonne sur quoi ?
C'est quelle base SQL ?
Marsh Posté le 26-07-2002 à 12:52:53
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
Marsh Posté le 26-07-2002 à 13:06:16
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, ...) ?
Marsh Posté le 26-07-2002 à 13:22:48
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
Marsh Posté le 26-07-2002 à 13:37:10
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.
Marsh Posté le 26-07-2002 à 13:40:07
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...)
Marsh Posté le 26-07-2002 à 14:12:35
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 ).
Marsh Posté le 26-07-2002 à 14:53:48
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 + )
Marsh Posté le 26-07-2002 à 17:51:57
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 -sans parler du zeste de patience vu comment je suis embêtant -).
Marsh Posté le 26-07-2002 à 23:45:34
Attention, çà va faire mal !
Code :
|
Le tout en une seule requête !
Le but est de garder celui de plus faible indice parmis les records qui ont des doublons.
Marsh Posté le 26-07-2002 à 12:18:57
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?