#case #common-table-expression
#случай #общее табличное выражение
Вопрос:
Я работаю в среде изолированной среды MySQL и получаю ошибку времени выполнения: неизвестный столбец ‘tab.maxid’ в ‘списке полей’. Вот мой исходный код:
with tab as(
select max(id) as maxid from seat)
select id,
CASE
WHEN (id % 2 <> 0 and id = tab.maxid) THEN student
WHEN (id % 2 <> 0 and id < tab.maxid) THEN lead(student) over(order by id)
ELSE lag(student) over(order by id)
END AS `student`
from seat;
Что я делаю не так? Спасибо за помощь!
Ответ №1:
попробуйте это:
;with tab as(
select max(id) as maxid from seat
)
select id,
CASE
WHEN (id % 2 <> 0 and id = (select maxid from tab)) THEN student
WHEN (id % 2 <> 0 and id < (select maxid from tab)) THEN lead(student) over(order by id)
ELSE lag(student) over(order by id)
END AS `student`
from seat;
другой вариант:
select id,
CASE
WHEN (id % 2 <> 0 and id = (select max(id) from seat)) THEN student
WHEN (id % 2 <> 0 and id < (select max(id) from seat)) THEN lead(student) over(order by id)
ELSE lag(student) over(order by id)
END AS `student`
from seat;
Комментарии:
1. Да, я использовал подзапрос, и это сработало, спасибо! Но почему tab.maxid не работает?
2. @Olexiy Usov как не работает ?! уже в вашем подзапросе вы вызываете CTE.
3. @Olexiy Usov если вы удалите CTE, ваш подзапрос не будет работать
4. @Olexiy Usov проблема в вашем исходном коде заключалась в том, что вы определили CTE, но не вызвали его
5. @Olexiy Usov Итак, вы использовали именно тот код, который я опубликовал. Да?