Результат CTE не виден в СЛУЧАЕ CTE, КОГДА

#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 Итак, вы использовали именно тот код, который я опубликовал. Да?