Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Probleme avec Order by

6 réponses
Avatar
joel
Bonjour,
j'ai un probleme avec Order by lorsque les 2 tables jointes ont un meme
attribut "Numero".
Ici, une table "DEVIS" et une table "COMMANDES".
Je veux trier la liste des devis sur le n° de commande :
SELECT d.Numero "Numero",d.ID IdDevis FROM DEVIS d LEFT JOIN COMMANDES c ON
c.ID_DEVIS=d.ID ORDER BY c.Numero ASC

Mais le tri s'effectue sur le n° de devis.
Il ne se fait sur le n° de commande que si :
- je supprime ou modifie l'alias "Numero" dans la clause Select
- j'ajoute une colonne avec le n° de commande

Quelqu'un a-t-il une explication ou une solution différente ?

--
Joel

6 réponses

Avatar
Gilles
Tu as raison le problème existe

Mais le tri s'effectue sur le n° de devis.
Il ne se fait sur le n° de commande que si :
- je supprime ou modifie l'alias "Numero" dans la clause Select
- j'ajoute une colonne avec le n° de commande



Tu peut régler ton problème uniquement en supprimant ou en renommant
l'alias avec "num" c'est bon
Pourquoi ???? mais tu n'es pas obligé de rajouter de colonne :-)

A+ gilles
Avatar
Med Bouchenafa
La clause ORDER BY peut utiliser un alias de colonne préfixé par un alias de
table comme dans l'exemple suivant de la base pubs
SELECT A.au_lname "Nom", A.au_fname "Prénom"
FROM authors A
ORDER BY A.Nom

Cela est conforme à la définition de la clause (Voir Aide En Ligne)


--
Bien cordialement
Med Bouchenafa




"joel" a écrit dans le message de news:

Bonjour,
j'ai un probleme avec Order by lorsque les 2 tables jointes ont un meme
attribut "Numero".
Ici, une table "DEVIS" et une table "COMMANDES".
Je veux trier la liste des devis sur le n° de commande :
SELECT d.Numero "Numero",d.ID IdDevis FROM DEVIS d LEFT JOIN COMMANDES c
ON
c.ID_DEVIS=d.ID ORDER BY c.Numero ASC

Mais le tri s'effectue sur le n° de devis.
Il ne se fait sur le n° de commande que si :
- je supprime ou modifie l'alias "Numero" dans la clause Select
- j'ajoute une colonne avec le n° de commande

Quelqu'un a-t-il une explication ou une solution différente ?

--
Joel


Avatar
Gilles
Salut med,


La clause ORDER BY peut utiliser un alias de colonne préfixé par un alias
de table comme dans l'exemple suivant de la base pubs
SELECT A.au_lname "Nom", A.au_fname "Prénom"
FROM authors A
ORDER BY A.Nom




Par contre dans sont exemple il précise bien la deuxieme table par son
préfix sur une colonne nomé de cette table
la où cela pose un problème c'est que l'alias utilisé à le même nom que la
colonne j'en vois pas l'utilité mais le tri s'effectue bien avec la colonne
du deuxième fichier plutôt que du premier ??

Gilles
Avatar
joel
C'est bien la présence d'un Alias identique au nom de l'attribut sur lequel
on veut trier qui pose problème car la requete suivante :
Select d.Prefixe "Numero",d.ID from DEVIS d
left join COMMANDES c on c.ID_DEVIS=d.ID
order by c.Numero
Va trier sur d.Prefixe !!!

Pire : Select d.Prefixe "Numero",d.ID from DEVIS d order by d.Numero
Trie là aussi sur d.Prefixe.

Ceci tend à me faire dire que le parser de SQL server ne tient pas compte de
la qualification s'il trouve le nom de l'attribut à trier dans la liste des
alias.

--
Joel


"Gilles" wrote:

Salut med,


> La clause ORDER BY peut utiliser un alias de colonne préfixé par un alias
> de table comme dans l'exemple suivant de la base pubs
> SELECT A.au_lname "Nom", A.au_fname "Prénom"
> FROM authors A
> ORDER BY A.Nom


Par contre dans sont exemple il précise bien la deuxieme table par son
préfix sur une colonne nomé de cette table
la où cela pose un problème c'est que l'alias utilisé à le même nom que la
colonne j'en vois pas l'utilité mais le tri s'effectue bien avec la colonne
du deuxième fichier plutôt que du premier ??

Gilles





Avatar
joel
Preuve que SQL ne test pas le qualificateur de table dans la clause Order by
s'il trouve l'attribut dans les alias, la requete suivante ne provoque pas
d'erreur :

Select d.Prefixe "Numero",d.ID from DEVIS d order by fsdmfljkqs.Numero
et trie sur d.Prefixe.
--
Joel


"joel" wrote:

Bonjour,
j'ai un probleme avec Order by lorsque les 2 tables jointes ont un meme
attribut "Numero".
Ici, une table "DEVIS" et une table "COMMANDES".
Je veux trier la liste des devis sur le n° de commande :
SELECT d.Numero "Numero",d.ID IdDevis FROM DEVIS d LEFT JOIN COMMANDES c ON
c.ID_DEVIS=d.ID ORDER BY c.Numero ASC

Mais le tri s'effectue sur le n° de devis.
Il ne se fait sur le n° de commande que si :
- je supprime ou modifie l'alias "Numero" dans la clause Select
- j'ajoute une colonne avec le n° de commande

Quelqu'un a-t-il une explication ou une solution différente ?

--
Joel


Avatar
Med Bouchenafa
L'alias l'emporte toujours sur le nom original.
C'est la règle


--
Bien cordialement
Med Bouchenafa

"Gilles" a écrit dans le message de
news:
Salut med,


La clause ORDER BY peut utiliser un alias de colonne préfixé par un alias
de table comme dans l'exemple suivant de la base pubs
SELECT A.au_lname "Nom", A.au_fname "Prénom"
FROM authors A
ORDER BY A.Nom




Par contre dans sont exemple il précise bien la deuxieme table par son
préfix sur une colonne nomé de cette table
la où cela pose un problème c'est que l'alias utilisé à le même nom que la
colonne j'en vois pas l'utilité mais le tri s'effectue bien avec la
colonne du deuxième fichier plutôt que du premier ??

Gilles