@Shillkas11

Почему нельзя использовать алиасы при выборке?

Есть следующий запрос:

SELECT id, (SELECT COUNT(product_detail_id) FROM products_details WHERE product_detail_id = p.id AND product_detail_type_id IN (1, 4, 123)) as 'match_product_details_types', (CASE WHEN match_product_details_types = 0 THEN 'no' ELSE 'yes' END) as 'match_res' FROM product p


Дело в том что при выполнении запроса происходит ошибка
#1054 - Неизвестный столбец 'match_product_details_types' в 'field list'
, т.е. уже при вычислении match_resmatch_product_details_types не найден. Как можно это реализовать?

P.S. Запрос примерный, в реальном запросе проверка match_product_details_types идет на десятки значений, упростил для понимания, поэтому использовать напрямую match_product_details_types нельзя.
  • Вопрос задан
  • 119 просмотров
Решения вопроса 1
@luna3956
Если правильно понял что Вам нужно то как-то так:

select 
  p.id,
  (CASE WHEN t1.num = 0 THEN 'no' ELSE 'yes' END) as 'match_res' 
from product p
inner join (
  SELECT product_id, COUNT(product_detail_id) as num
  FROM products_details 
  WHERE 
    product_detail_type_id IN (1, 4, 123)
  group by product_id
) t1 on
  t1.product_id = p.id
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
BojackHorseman
@BojackHorseman Куратор тега MySQL
...в творческом отпуске...
потому что на момент первого обращения к алиасу его значение еще неизвестно. чтобы не выстрелить себе в ногу
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы