SELECT
оценивается после предложения WHERE
, поэтому псевдонимы столбцов, определенные в SELECT
, недоступны для использования в WHERE
.
MySQL необычен тем, что позволяет вамиспользуйте псевдонимы столбцов в предложении having
, чтобы вы могли переделать запрос, чтобы переместить предикат из предложения where
в предложение having
.
В качестве альтернативы вы можете создать представление или производную таблицу сследующее определение
SELECT `provider`.* ,
`products`.`placement`,
`price`.`price`+ IFNULL(
(SELECT `price`
FROM `price`
WHERE `handle`=
(SELECT `group`
FROM `group_provider`
WHERE `provider_id`=`provider`.`id`
)
)
,'0')>0 AS `price`
FROM `provider`
LEFT JOIN `products`
ON `provider`.`id`=`products`.`web`
LEFT JOIN `price`
ON `price`.`handle`=`provider`.`id`
и ссылки на псевдонимы столбцов в предложении WHERE
в SELECT
из этого согласно ответу Марка.Я не совсем знаком с оптимизатором запросов MySQL, чтобы знать, будет ли какой-либо из этих подходов влиять на производительность.