0 votes

la colonne dans SELECT est "non définie" dans WHERE

J'ai une question à poser :

SELECT exhibitor_participation+0 AS exhibitor_participation_value 
FROM `exhibitor_registry` 
WHERE ((exhibitor_participation_value & 1) = 1)

Question :

Pourquoi renvoie-t-il ce : ?

Unknown column 'exhibitor_participation_value' in 'where clause'

Ce n'est pas censé être un succès puisque j'ai défini exhibitor_participation_value dans la clause SELECT ?

3voto

Jason Punyon Points 21244

Cela peut dépendre de votre base de données mais généralement non. Les alias de colonne définis dans la clause select ne sont pas disponibles dans la clause where.

1voto

Andrzej Doyle Points 52541

Le site where opère sur les colonnes brutes de l'ensemble de données. Le site select au même niveau opère sur la même chose, et peut éventuellement donner des alias pour les couches de code extérieures. Mais surtout, les alias "enveloppent" le niveau actuel et ne sont pas disponibles à ce niveau - en particulier, vous ne pouvez pas utiliser les alias dans la clause where.

Vous pourrait ont fait quelque chose comme ça :

SELECT *
FROM
    (SELECT exhibitor_participation+0 AS exhibitor_participation_value
     FROM `exhibitor_registry`)
WHERE ((exhibitor_participation_value & 1) = 1)

et l'alias peut être utilisé dans la clause where, puisqu'il s'agit maintenant du nom d'une des colonnes sélectionnées à ce niveau. Pousser la sélection vers le bas dans une vue interne mai limiter la capacité de la base de données à proposer un plan de requête approprié (qui, comme d'habitude, dépendra de nombreux facteurs et variera pour chaque requête individuelle). D'autre part, si la condition where prend un temps non négligeable à calculer, vous pouvez réellement gagner du temps en la calculant une fois dans la vue interne plutôt que potentiellement deux fois (encore une fois, l'optimiseur peut réutiliser la première valeur ici - cela dépend).

Comme pour toutes les questions liées à la performance, il faut établir un profil pour voir ce qui est réellement nécessaire dans votre situation spécifique.

0voto

user1822265 Points 79

Au lieu d'utiliser l'alias que vous avez attribué à cette colonne, utilisez simplement le nom réel de la colonne ou dans ce cas :

SELECT exhibitor_participation+0 AS exhibitor_participation_value 
FROM `exhibitor_registry` 
WHERE ((exhibitor_participation +0 & 1) = 1)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X