Bug entre un alias (AS) et BETWEEN [Résolu]

Signaler
Messages postés
11
Date d'inscription
dimanche 19 mars 2006
Statut
Membre
Dernière intervention
16 février 2014
-
Messages postés
32986
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 juin 2021
-
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

Messages postés
32986
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 juin 2021
351
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'


Messages postés
11
Date d'inscription
dimanche 19 mars 2006
Statut
Membre
Dernière intervention
16 février 2014

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 ...
Messages postés
32986
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 juin 2021
351
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.
Messages postés
11
Date d'inscription
dimanche 19 mars 2006
Statut
Membre
Dernière intervention
16 février 2014

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]
Messages postés
32986
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 juin 2021
351
ça rejoint ce que je disais : Utilisé pour " l'affichage ".