fyav
Messages postés124Date d'inscriptionmardi 30 décembre 2003StatutMembreDernière intervention12 février 2010
-
18 févr. 2005 à 12:05
cs_moustachu
Messages postés1079Date d'inscriptionjeudi 14 novembre 2002StatutMembreDernière intervention 1 janvier 2012
-
15 juin 2008 à 13:48
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
cs_moustachu
Messages postés1079Date d'inscriptionjeudi 14 novembre 2002StatutMembreDernière intervention 1 janvier 2012 15 juin 2008 à 13:48
Bonjour,
La clause IN est parfois beaucoup plus lente que la clause EXISTS, notamment sur Access. Sur des véritables SGBD je suis pas sûr qu'il y ait une grande différence.
++
moustachu
maxroucool
Messages postés44Date d'inscriptionjeudi 20 novembre 2003StatutMembreDernière intervention28 janvier 2013 14 juin 2008 à 21:52
Slt,
Merci pour ces deux requêtes. Seulement la requête de suppression a quand même mis 745 secondes pour supprimer une cinquantaine d'enregistrements dans une table de 5300 lignes. Pourtant j'avais passer le champ en question en index juste avant.
Y'a pas moyen de raccourcir un peu le temps d'exécution?
+++
EMSIEN
Messages postés194Date d'inscriptionlundi 26 juillet 2004StatutMembreDernière intervention11 juin 2009 7 juin 2007 à 13:30
Bonjour et merci pour ton aide.
cs_ankou22
Messages postés81Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 7 juin 2012 8 févr. 2007 à 17:49
oups je me rend compte juste après avoir posté que ca marche pas avec les triplons et les quadriplons. Puisque je ne supprimer que le Max(id_Ch)
Pas grave, executez la plusieurs fois ...
cs_ankou22
Messages postés81Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 7 juin 2012 8 févr. 2007 à 17:45
Je me rend compte que le sujet est un peu ancien, vu que je cherchais a supprimer ces foutus doublons. J'ai trouvé cette solution pour supprimer les doublons.
Avant, il faut jouter une clef primaire unique auto-incrémenté (id_Ch )
DELETE FROM MaTable
WHERE (id_Ch IN
(SELECT MAX(id_Ch) AS id_a_supprimer
FROM
(SELECT id_Ch, Ch1, Ch2, Ch3
FROM MaTable
WHERE ((Ch1 + Ch2 + Ch3) IN
(SELECT Ch1 + Ch2 + Ch3 AS MaConcatenation
FROM MaTable
GROUP BY Ch1, Ch2, Ch3
HAVING (COUNT(*) > 1)
)
)
) DERIVEDTBL
GROUP BY Ch1, Ch2, Ch3
)
)
Je sais, c'est pas très élégant, mais ca marche.
Ankou22
cs_dhardy
Messages postés45Date d'inscriptionlundi 23 juin 2003StatutMembreDernière intervention24 février 2009 17 janv. 2006 à 15:31
Bonjour,
Aurais-tu une procédure ou une requête simple qui pourrait effacer les doublons uniquement ?
Merci
cs_moustachu
Messages postés1079Date d'inscriptionjeudi 14 novembre 2002StatutMembreDernière intervention 1 janvier 2012 22 févr. 2005 à 09:10
Merci de vos commentaires
Domilio>Oui tout à fait... et je rpéfère une WHERE EXISTS ;o) mais c'est une question de goût.
cs_Domilo
Messages postés32Date d'inscriptionjeudi 31 janvier 2002StatutMembreDernière intervention22 février 2005 22 févr. 2005 à 09:06
Oui,
Et pour aller plus loin, pour lister les éléments en doublon tu peux faire quelquechose comme cela :
Select
Ch1,Ch2,Ch3,
AutresChamps1,...
from maTable Lst
JOIN (
Select Ch1,Ch2,Ch3 from maTable
<where ....>
Group by Ch1,Ch2,Ch3
Having count(*) > 1
) Dbl ON Lst.Ch1 = Dbl.Ch1
AND Lst.Ch2 = Dbl.Ch2
AND Lst.Ch3 = Dbl.Ch3
ORDER BY
Ch1,Ch2,Ch3
D'autres préfèreront utiliser un WHER EXISTS qui marche aussi...
fyav
Messages postés124Date d'inscriptionmardi 30 décembre 2003StatutMembreDernière intervention12 février 2010 18 févr. 2005 à 12:05
15 juin 2008 à 13:48
La clause IN est parfois beaucoup plus lente que la clause EXISTS, notamment sur Access. Sur des véritables SGBD je suis pas sûr qu'il y ait une grande différence.
++
moustachu
14 juin 2008 à 21:52
Merci pour ces deux requêtes. Seulement la requête de suppression a quand même mis 745 secondes pour supprimer une cinquantaine d'enregistrements dans une table de 5300 lignes. Pourtant j'avais passer le champ en question en index juste avant.
Y'a pas moyen de raccourcir un peu le temps d'exécution?
+++
7 juin 2007 à 13:30
8 févr. 2007 à 17:49
Pas grave, executez la plusieurs fois ...
8 févr. 2007 à 17:45
Avant, il faut jouter une clef primaire unique auto-incrémenté (id_Ch )
DELETE FROM MaTable
WHERE (id_Ch IN
(SELECT MAX(id_Ch) AS id_a_supprimer
FROM
(SELECT id_Ch, Ch1, Ch2, Ch3
FROM MaTable
WHERE ((Ch1 + Ch2 + Ch3) IN
(SELECT Ch1 + Ch2 + Ch3 AS MaConcatenation
FROM MaTable
GROUP BY Ch1, Ch2, Ch3
HAVING (COUNT(*) > 1)
)
)
) DERIVEDTBL
GROUP BY Ch1, Ch2, Ch3
)
)
Je sais, c'est pas très élégant, mais ca marche.
Ankou22
17 janv. 2006 à 15:31
Aurais-tu une procédure ou une requête simple qui pourrait effacer les doublons uniquement ?
Merci
22 févr. 2005 à 09:10
Domilio>Oui tout à fait... et je rpéfère une WHERE EXISTS ;o) mais c'est une question de goût.
22 févr. 2005 à 09:06
Et pour aller plus loin, pour lister les éléments en doublon tu peux faire quelquechose comme cela :
Select
Ch1,Ch2,Ch3,
AutresChamps1,...
from maTable Lst
JOIN (
Select Ch1,Ch2,Ch3 from maTable
<where ....>
Group by Ch1,Ch2,Ch3
Having count(*) > 1
) Dbl ON Lst.Ch1 = Dbl.Ch1
AND Lst.Ch2 = Dbl.Ch2
AND Lst.Ch3 = Dbl.Ch3
ORDER BY
Ch1,Ch2,Ch3
D'autres préfèreront utiliser un WHER EXISTS qui marche aussi...
18 févr. 2005 à 12:05