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
35830
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
6 juillet 2022
- 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
35830
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
6 juillet 2022
358
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
35830
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
6 juillet 2022
358
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
35830
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
6 juillet 2022
358
11 févr. 2014 à 12:43
ça rejoint ce que je disais : Utilisé pour " l'affichage ".
0