Есть два 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
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть БД, в ней Primary key это поле name (varchar 255)И есть поле main (varchar 255)
Надо искать пересечения множествУ каждого класса есть метод добавляющий элемент, метод выводящий содержание класса на экран
У меня есть массив емейлов, мне нужно из них вытащить только доменыКак с помощью метода split не учитывать или удалить строку, которая идет до знака...
Как правильно считать элементы из файла в массивИ что бы потом этот массив можно было передавать другим методам, например для сортировки