Le Standard SQL (ou MySQL) ne permet pas l'utilisation d'alias de colonne dans une clause where, car
lorsque la clause where est évaluée, la valeur de la colonne n'ont pas encore été déterminée.
(à partir de la documentation de MySQL). Ce que vous pouvez faire est de calculer la valeur de la colonne dans le OÙ la clause, enregistrer la valeur dans une variable, et de l'utiliser dans la liste de champs. Par exemple, vous pourriez faire ceci:
SELECT `users`.`first_name`, `users`.`last_name`, `users`.`email`,
@postcode AS `guaranteed_postcode`
FROM `users` LEFT OUTER JOIN `locations`
ON `users`.`id` = `locations`.`user_id`
WHERE (@postcode := SUBSTRING(`locations`.`raw`,-6,4)) NOT IN
(
SELECT `postcode` FROM `postcodes` WHERE `region` IN
(
'australia'
)
)
Cela évite l'évaluation de l'expression deux fois.