Bonsoir le Forum,
J'ai une requete avec SELECT DISTINCT
Comment faire pour qu'il garde le meme ordre des records qui se trouve dans la table sans qu'il ne trie d'office sur le premier champs du SELECT
Merci d'avance pour vos réponses
Bonsoir le Forum,
J'ai une requete avec SELECT DISTINCT
Comment faire pour qu'il garde le meme ordre des records qui se trouve dans la table sans qu'il ne trie d'office sur le premier champs du SELECT
Merci d'avance pour vos réponses
Bonjour
Est-ce que dans ta table tu as un moyen d'avoir l'ordre de tri (clé primaire) , si c'est le cas, il faut utiliser Order By.
Mais il te faut aboslument une référence
Starec
Bonjour Starec,
Merci pour ta réponse
Non justement le probleme c'est que si je mets une clé primaire avec par ex un champs avec numerotation automatique, le DISTINCT ne sert plus à rien car si je fais un order by sur cette clé, je suis obligé de l'ajouter dans la clause SELECT DISTINCT et je me retrouve avec mes doublons....![]()
Merci pour ta réponse
Re
Si tu n'as pas de repère dans ta table je ne vois pas comment faire, désolé.
Starec
Re,
Bhein oui c'est bien ce que je me dis mais c'est bien dommage que quand c'est un select distinct, il retrie automatiquement les records...
Une remarque sans doute inutile :
On peut penser que parmi les champs du GROUP By , il y en ait un qui puisse intéresser l'utilisateur pour le classement...
Bonne journée![]()
En reprenant l'idée d'un champ avec numéro auto-incrémenté, qu'on appellerait par exemple id, on pourrait imaginer ça :
Requête originale de dédoublonnage :
Requête de dédoublonnage respectant l'"ordre" de la table :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SELECT DISTINCT c1, c2 FROM test
A tester bien sûr !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT c1, c2 FROM test GROUP BY c1, c2 ORDER BY MIN(id)
Cette requete doit le faire :
... mais risque d'être un peu gourmande sur des grosses tables
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT [noArticle], [nomArticle], [libArticle] FROM t_article WHERE noArticle IN ( SELECT min(B.noArticle) FROM t_article as B GROUP BY B.nomArticle,B.libArticle ) ORDER BY [noArticle];
Bonne journée
EDIT : noArticle est une clé primaire en num Auto ...
Re,
Merci pour vos réponses...
J1, J'ai testé mais le champs id doit etre dans la clause GROUP BY
micniv, Ca marche nickel, un grand merci, tu me sors une grosse épine hors du pied. Pas de probleme pour les grosses tables j'effectue cette requete sur une table temp
Comme ça m'étonnait, je viens de tester de mon côté. Chez moi, ça marche.Envoyé par pobrouwers
En partant de la table test ci-dessous :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 id c1 c2 -- -- -- 1 2 100 2 1 10 3 1 10
Ma requête
retourne bien
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SELECT c1, c2 FROM test GROUP BY c1, c2 ORDER BY MIN(id)
En adaptant ma requête à ton cas de figure, tu n'aurais pas ajouté le champ id dans ton SELECT par hasard ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 c1 c2 -- -- 2 100 1 10
Re J1,
Effectivement, je viens de réessayer et cela fonctionne, c'est que j'ai du laisser id dans la clause SELECT
Merci pour tes recherches et ta réponse.
Bonne soirée
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager