Стандартный SQL (или MySQL) не разрешает использование псевдонимов столбцов в предложении WHERE, поскольку
при оценке предложения WHERE значение столбца может быть еще не определено.
(из документации MySQL ). Что вы можете сделать, так это вычислить значение столбца в предложении WHERE , сохранить значение в переменной и использовать его в списке полей. Например, вы можете сделать это:
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'
)
)
Это позволяет избежать повторения выражения, когда оно усложняется, что облегчает поддержку кода.