begin process at 2012 05 26 14:26:44
  Trouver un code source :
 
dans
 
Accueil > Forum > 

SQL

 > 

Access

 > 

Requêtes

 > 

Dédoublonner


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Dédoublonner

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ée dans : table, t2, mm, ref1, ref2


Répondre à ce message

Sujets en rapport avec ce message

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 : 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 Copier Table [ par nborges ] salut,j´ai besoin d´une table temporaire pour des report, comme il en existe plus d´un, j´ai une table modele qu je cris si elle n´existe pas, ensuite Verifier existence table [ par nborges ] hello,je voudrais savoir coment je peux savoir si une table existe deja cela sur  sql server avec VB.Netmerci [8D] Drop Table [ par SuperBouly ] Bonjour, Je désire supprimer une table sur une base Access distante.Je fais : MaRequete="DROP TABLE MaTable" , puis le programme est censé exécute MySQL copier une table vers une autre table [ par julien__ ] Je ne trouve aucun code source ni aide à ce sujet...Je cherche à copier une sélection d'une table MySQL dans une autre table qui n'est pas vide avec d Optimisation d'une requête de mise à jour [ par josserand ] Bonjour, J'ai besoin de créer des requêtes de mises à jour, appelant une sous-requête. Du genre :Code :</d Exporter la structure d'une table dans un fichier XML structuré [ par djdiabolik ] Bonjour,j'ai un problème à résoudre rapidement :je dois générer un fichier XML contenant la structure d'une table sous SQL Server 2000, après quelques copier le contenu d'une table dans une autre [ par biloutte33 ] bonjour,j'aimerais savoir quel requete faut-il que j'execute pour copier le contenu d'une table (le contenu pas les champs!) à une autre?genre par exe


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,499 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales