Bug entre un alias (AS) et BETWEEN

Résolu
tomy46 Messages postés 11 Date d'inscription dimanche 19 mars 2006 Statut Membre Dernière intervention 16 février 2014 - 11 févr. 2014 à 02:38
jordane45 Messages postés 38157 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 mai 2024 - 11 févr. 2014 à 12:43
Bonjour,

J'ai une liste de client avec leur date de naissance...
Je souhaite effectuer une requête qui calcule leur âge et me fait uniquement ressortir un tranche précise (ex : N# de client entre 50-60 ans) ...
Seul problème la présence d'un alias semble poser problème ...

Voici ma requête :

SELECT YEAR(DATE_SUB(NOW(), INTERVAL TO_DAYS('client_anniv') DAY)) AS AGE
FROM client WHERE AGE BETWEEN '50' AND '60';

Cette requête bug sauf si je place WHERE AGE sous la forme "WHERE 'AGE'" mais après ça, plus rien ...
Par contre si je supprime AGE et que je recopie la formule au complet comme ceci :

SELECT YEAR(DATE_SUB(NOW(), INTERVAL TO_DAYS('client_annif') DAY))
FROM client WHERE YEAR(DATE_SUB(NOW(), INTERVAL TO_DAYS('client_annif') DAY)) BETWEEN '50' AND '60'

Là plus le moindre problème, mais c'est du coup beaucoup moins facile à manipuler ...

Pouvez-vous m'aider ?
Merci !

3 réponses

jordane45 Messages postés 38157 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 mai 2024 344
11 févr. 2014 à 09:44
Bonjour,
Les alias ne sont réellement utilisés que pour l'affichage .

Au pire, tu peux ruser en passant par un sous select.

SELECT * FROM
  (SELECT 
    YEAR(DATE_SUB(NOW(), INTERVAL   TO_DAYS('client_anniv') DAY)) AS AGE
   FROM client ) Tb1
WHERE Tb1.AGE BETWEEN '50' AND '60'


1
tomy46 Messages postés 11 Date d'inscription dimanche 19 mars 2006 Statut Membre Dernière intervention 16 février 2014
11 févr. 2014 à 12:33
Ah pas bête !
Merci pour l'idée :)

Par contre c'est assez surprenant dans le sens où je peux quand même utiliser les alias dans les GROUP BY ...

Bref je peux les utiliser de partout SAUF dans le WHERE ... C'est dommage ...
0
jordane45 Messages postés 38157 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 mai 2024 344
Modifié par jordane45 le 11/02/2014 à 12:35
il me semble (sans certitude) que le "WHERE" est fait avant l'affectation des Alias dans le "SELECT" .. et donc que l'ALIAS n'existe pas encore...
Alors que le GROUP BY ,lui , est fait à la fin.

PS: pense à mettre la discussion en résolue si la réponse te convient.
0
tomy46 Messages postés 11 Date d'inscription dimanche 19 mars 2006 Statut Membre Dernière intervention 16 février 2014
11 févr. 2014 à 12:41
Je viens de trouver une réponse qui explique cette différence :

"Les alias des tables sont utilisables dans les WHERE, HAVING et autres.

Les alias des champs ne sont pas utilisables dans les mêmes WHERE, HAVING et autres. Comme le dit etarip, ils ne servent qu'a renommer un champ dans le "tableau" de résultats (mais utilisables par la suite dans un Recordset par exemple)"

[xmarabout - developpez.net]
0
jordane45 Messages postés 38157 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 mai 2024 344
11 févr. 2014 à 12:43
ça rejoint ce que je disais : Utilisé pour " l'affichage ".
0
Rejoignez-nous