как разрешить Неизвестный столбец в предложении 'where claus' - PullRequest
0 голосов
/ 06 января 2019

У меня проблема с SQL, чтобы выбрать ту же информацию, когда у меня много предложений первый столбец неизвестен в другом предложении.

Это мое sql выражение:

SELECT * ,
(select sum(sell) from product_details where product_details.product_id = products.id) as total ,
(select sell from product_details where product_details.product_id = products.id order by product_details.id desc limit 1) as ysell ,
(select sum(sell) as wsell FROM (select sell from product_details where product_details.product_id = products.id order by product_details.id desc limit 2 ) as weeksell) as wsell
FROM `products`

Я пытаюсь получить информацию о товаре, а вторая таблица - product_details на основе идентификатора продукта;

ysell = последняя продажа

всего = всего продать

wsell = лимит 7 продать с помощью sum () и выбрать из последних 7

но когда я запускаю выражение, я получаю ошибку

#1054 - Unknown column 'products.id' in 'where clause'

не знает в этой строке

(select sum(sell) as wsell FROM (select sell from product_details where product_details.product_id = products.id order by product_details.id desc limit 2 ) as weeksell) as wsell

Можете ли вы предложить какие-либо идеи.

1 Ответ

0 голосов
/ 06 января 2019

Ваша проблема в том, что предложения корреляции не могут быть вложены более чем на один уровень в глубину - следовательно, причина по products не видна. Одним из решений является преобразование этого в условную агрегацию. Это немного сложно, но вот один метод:

SELECT p.* ,
       sum(pd.sell) as total,
       max(case when pd.id = pdd.max_id then pd.sell end) as ysell,
       sum(case when pd.id >= pdd.id7 then pd.sell end) as wsell
FROM products p JOIN
     product_details pd
     ON pd.product_id = p.id JOIN
     (SELECT pd.product_id, MAX(pd.id) as max_id,
             SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(pd.id ORDER BY pd.id DESC), ',', 7), ',', -1) as id7
      FROM product_details pd
      GROUP BY pd.product_id
     ) pdd
     ON pdd.product_id = p.id
GROUP BY p.id;  -- reasonable assuming `id` is unique/primary key
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...