Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Dédoublonner [ Access / Requêtes ] (ehmarc)

mercredi 23 août 2006 à 18:44:35 | Dédoublonner

ehmarc

Salut,

Je veut dédoublonner une table (je suis sous SQL server)

Donc dans un premier temps :
recherche des doublons et mise dans une table temporaires :
INSERT INTO %Table(MM_DOUBLON)
 SELECT *
  FROM %Table(MM_LIGNE)
  GROUP BY PROCESS_INSTANCE
  ,MM_REF1
  ,MM_REF2 
  HAVING COUNT(*) > 1
Cette requete marche

ensuite je delete les enregistrement de ma table temporaires dans la deuxieme table
DELETE
  FROM PS_MM_LIGNE
 WHERE EXISTS (
 SELECT t2.MM_REF1
 , t2.MM_REF2 
  FROM PS_MM_DOUBLON t2 ,PS_MM_LIGNE t1
 WHERE t1.MM_REF1 = t2.MM_REF1
   AND t1.MM_REF2 = t2.MM_REF2 
  GROUP BY t2.MM_REF1 , t2.MM_REF2
  HAVING COUNT(*) > 1)
Cette requete ne marche pas aidez moi

puis je réinsère mes donnés
INSERT INTO %Table(MM_LIGNE)
 SELECT *
  FROM %Table(MM_DOUBLON)
Cette requete marche

++

"Aucun de nous ne sait ce que nous savons tous, ensemble." Lao Tseu inventeur du "copier coller" [8D]

jeudi 24 août 2006 à 09:51:42 | Re : Dédoublonner

skweeky

Membre Club Administrateur CodeS-SourceS
Salut,

Première chose, dans une clause EXISTS pas la peine de mettre quelque chose dans la clause SELECT, SELECT * est très bien dans ce cas.

Deuxièmement, la requête de suppression, doit supprimer tous les enregistrements qui ont un doublon, au lieu de retirer seulement les enregistrement en trop...

Comme c'est sur Access, je ne connais pas la manière idéale de faire.
En général dans la table à dédoublonner on ajoute un champ, type auto-incrément (s'il y a déjà une clef primaire sur la table on utilisera celle-ci), la requête donnerait dans ce cas :

DELETE
  FROM PS_MM_LIGNE
 WHERE ChampInc IN
(SELECT MAX(ChampInc)
  FROM PS_MM_DOUBLON t2 ,PS_MM_LIGNE t1
 WHERE t1.MM_REF1 = t2.MM_REF1
   AND t1.MM_REF2 = t2.MM_REF2 
  GROUP BY t2.MM_REF1 , t2.MM_REF2
  HAVING COUNT(*) > 1))

Ici on part du principe qu'il n'y a que des doublons (pas de triples, etc.), s'il y en avait il faudrait réexecuter une nouvelle fois la requête.

Christian Robert - Winwise
http://blogs.developpeur.org/christian/
MCT - Database Development / Database Administration

jeudi 24 août 2006 à 10:54:11 | Re : Dédoublonner

ehmarc

Salut,

Merci de ta réponse

Pour l'utilisation d'une clef unique j'y avais pensé (merci google) malheuresment je n'ai pas les droits necessaire pour faire un alter table (il n'y a pas de clef unique dans la base) de plus je ne suis pas sous acces mais sur MS SQL SERVER 2005 (ma souris a du glisser quand j'ai choisi le theme je trouve ca byzarre d'ailleurs...)

++

"Aucun de nous ne sait ce que nous savons tous, ensemble." Lao Tseu inventeur du "copier coller" [8D]


jeudi 24 août 2006 à 10:58:35 | Re : Dédoublonner

skweeky

Membre Club Administrateur CodeS-SourceS

Ah ok... Ca devrait simplifier les choses du coups...
Essaye çà :

DELETE TOP (1)
  FROM PS_MM_LIGNE
 WHERE ChampInc IN
(SELECT MAX(ChampInc)
  FROM PS_MM_DOUBLON t2 ,PS_MM_LIGNE t1
 WHERE t1.MM_REF1 = t2.MM_REF1
   AND t1.MM_REF2 = t2.MM_REF2 
  GROUP BY t2.MM_REF1 , t2.MM_REF2
  HAVING COUNT(*) > 1))


Ca doit supprimer un enregistrement à la fois. Tu mets cette requête dans une jolie boucle.
Une fois qu'elle ne supprime plus rien, c'est qu'il n'y a plus de doublons.

Christian Robert - Winwise
http://blogs.developpeur.org/christian/
MCT - Database Development / Database Administration


jeudi 24 août 2006 à 11:28:33 | Re : Dédoublonner

ehmarc

Comme je l'ai dit au message d'avant je n'ai pas de clef primaire ou unique dans cette table c'est donc mon gros soucis il ya juste des données brute

"Aucun de nous ne sait ce que nous savons tous, ensemble." Lao Tseu inventeur du "copier coller" [8D]

jeudi 24 août 2006 à 11:36:44 | Re : Dédoublonner

skweeky

Membre Club Administrateur CodeS-SourceS
Oui, mais çà n'est pas grave dans ce cas, le TOP dans le DELETE supprime le premier enregistrement ui lui tombe sous la main.

Et je m'étais trompé de requête dans mon copier / coller...

Avec ceci çà devrait résoudre le pb.

DECLARE

@count int

SET

@count = 1

WHILE

@count != 0
BEGIN
DELETE
TOP(1
)
FROM
PS_MM_LIGNE
WHEREEXISTS(

SELECT
*
FROM PS_MM_DOUBLON t2 ,
PS_MM_LIGNE t1
WHERE t1.MM_REF1 = t2.
MM_REF1
AND t1.MM_REF2 = t2.
MM_REF2
GROUPBY t2.MM_REF1 , t2.
MM_REF2
HAVINGCOUNT(*)> 1
)
SET @count =
@@ROWCOUNT
END



Christian Robert - Winwise
http://blogs.developpeur.org/christian/
MCT - Database Development / Database Administration

jeudi 24 août 2006 à 12:02:11 | Re : Dédoublonner

ehmarc

Hum le probleme c'est que quand je fait ca :
DELETE
FROM
PS_MM_LIGNE
WHERE EXISTS(

SELECT *
FROM PS_MM_DOUBLON t2 ,
PS_MM_LIGNE t1
WHERE t1.MM_REF1 = t2.
MM_REF1
AND t1.MM_REF2 = t2.
MM_REF2
GROUP BY t2.MM_REF1 , t2.
MM_REF2
HAVING COUNT(*)> 1
)

Ca me supprime tout les enregistrements (c'est pas tres cool lol)
(Ma table est plus complexe que juste MM_REF1 et MM_REF2, j'ai 7 champs à vérifier avant de dire qu'il y a un doublon)
Par contre j'ai réussi a avoir ce que je voulai sur une autre requete masi c'est pas tres jolie ....

SELECT *
FROM
PS_MM_LIGNE
WHERE MM_REF1 IN (

   SELECT MM_REF1
   FROM PS_MM_DOUBLON t2 ,
PS_MM_LIGNE t1
   WHERE t1.MM_REF1 = t2.
MM_REF1 
   AND t1.MM_REF2 = t2.
MM_REF2 
   GROUP BY t2.MM_REF1 , t2.
MM_REF2
   HAVING COUNT(*)> 1
)
and MM_REF2 IN (
   SELECT MM_REF2

   FROM PS_MM_DOUBLON t2 ,PS_MM_LIGNE t1
   WHERE t1.MM_REF1 = t2.
MM_REF1 
   AND t1.MM_REF2 = t2.
MM_REF2 
   GROUP BY t2.MM_REF1 , t2.
MM_REF2
   HAVING COUNT(*)> 1)


J'ai l'impression que c'est le EXISTSqui foire  J'ai du faire une connerie ....

++
"Aucun de nous ne sait ce que nous savons tous, ensemble." Lao Tseu inventeur du "copier coller" [8D]




Cette discussion est classé dans : table, t2, mm, ref1, ref2


Répondre à ce message

Sujets en rapport avec ce message

probleme de comparaison de table [ par ehmarc ] SalutJe suis sous MySQL voici ma requetejai deux table t1 et t2 qui ont en gros une soixantaine d'entrer chacunneje veut faire ressortir les champ qui Optimiser une requete [ par ehmarc ] Salut,Pouvez-vous me dire ce qu'il faut faire pour optimiser une requete par exemple je sais que si on fait souvent des recherches via une colonnes (s Problème de requete [ par Lamarmottedu73 ] Bonjour, je cherche depuis ce matin comment résoudre ce problème sans trouver la moindre solution ou trace de solution.Je m'explique :J'ai une table : Requête sql sur plusieurs tables [ par Eros2007 ] Bonjour tout le monde.voila ma question:j'utilise une requette sql pour pouvoir faire un preview et imprimer par la suite les enregistrements des clie Besoin d'aide pour une requête [ par theguitou ] Bonjour,Je cherche un moyen "propre" de "transformer" une table de ce genre :ID | ATTRIBUT-------------1  | mu11  | mu21  | mu32  | mu42  | mu53  | mu Demande d'aide pour la création de trigger : Mysql [ par dimitriusai ] Bjr à tous,voici ma question.J'aimerais créer un trigger, mais là c'est une première.Voici ce que j'aimerais qu'il fasse.J'ai une table, disons table_ parcourir une table en T-sql [ par ninini2008 ] Bonjourje suis en stage et je veux parcourir une table qui contien deux colonne ID_MACHINE1 et ID_MACHINE2 , j'ai recupéré les deux ID à partir d'autr Problème de join sur Access [ par Panthouffle ] Bonjour, je dois faire un join entre deux tables, cependant, il n'y a aucun champ comun entre ces deux tables, je dois passer par une table pour compl Mise à jour d'un champs. [ par mehdiyou ] Salut tout le monde, j'ai un petit problème au niveau de Sql. Exple: on a une table Client et une Table commande. Lorsque je change le nom du client d Format time mysql HH:MM [ par olibara ] Bonjour Est il possible de forcer mysql a interpreter le temps en HH:MM plutot que HH:MM:SS Dans mon application, le temps est géré en HH:MM et il


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,281 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.