tomy46
Messages postés11Date d'inscriptiondimanche 19 mars 2006StatutMembreDernière intervention16 février 2014
-
11 févr. 2014 à 02:38
jordane45
Messages postés37722Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention24 septembre 2023
-
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 ...
jordane45
Messages postés37722Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention24 septembre 2023342 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'
tomy46
Messages postés11Date d'inscriptiondimanche 19 mars 2006StatutMembreDernière intervention16 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 ...
jordane45
Messages postés37722Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention24 septembre 2023342 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.
tomy46
Messages postés11Date d'inscriptiondimanche 19 mars 2006StatutMembreDernière intervention16 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]
jordane45
Messages postés37722Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention24 septembre 2023342 11 févr. 2014 à 12:43
ça rejoint ce que je disais : Utilisé pour " l'affichage ".