Есть два SQL-запроса. Первый выполняется без проблем:
SELECT DISTINCT self.*,
(SELECT COUNT(*) FROM `ps_orders`
WHERE self.`id_customer` != 'NULL'
AND `id_customer` = self.`id_customer`) AS orders_total
FROM `ps_module_actionssubscription` AS self
LIMIT 0,20;
А на второй запрос MySQL ругается Error Code: 1054. Unknown column 'orders_total' in 'where clause':
SELECT DISTINCT self.*,
(SELECT COUNT(*) FROM `ps_orders`
WHERE self.`id_customer` != 'NULL'
AND `id_customer` = self.`id_customer`) AS orders_total
FROM `ps_module_actionssubscription` AS self
WHERE orders_total > 5
LIMIT 0,20;
Где ошибка во втором запросе?? Как правильно его записать, чтобы он возвращал только результаты по условию WHERE??
В документации en/ru написано:
It is not allowable to refer to a column alias in a WHERE clause, because the column value might not yet be determined when the WHERE clause is executed. See Section B.1.5.4, “Problems with Column Aliases”.
тобишь
Псевдонимы столбцов нельзя использовать в выражении WHERE, поскольку находящиеся в столбцах величины на момент выполнения WHERE могут быть еще не определены. See section A.5.4 Проблемы с alias.
Вместе с этим
выражение HAVING может ссылаться на любой столбец или псевдоним, упомянутый в выражении select_expression. HAVING отрабатывается последним, непосредственно перед отсылкой данных клиенту, и без какой бы то ни было оптимизации.
и
Псевдонимы можно использовать для ссылки на столбец в GROUP BY, ORDER BY или в части HAVING, а также для лучшего именования столбцов
Получается для псевдонимов в данном случае следует применять HAVING вместо WHERE.
P.S. Для небольшого ознакомления предлагаю ознакомиться с вопросом на enSO WHERE vs HAVING
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости