【问题标题】:CTE result not visible within CTE CASE WHENCTE 结果在 CTE CASE WHEN 中不可见
【发布时间】:2020-12-13 01:52:24
【问题描述】:

我在 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;

我做错了什么?感谢您的帮助!

【问题讨论】:

    标签: case common-table-expression


    【解决方案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;
    

    【讨论】:

    • 是的,我使用了子查询,它成功了,谢谢!但是为什么 tab.maxid 不起作用?
    • @Olexiy Usov 怎么不工作?!已经在您的子查询中,您正在调用 CTE。
    • @Olexiy Usov 如果您删除 CTE,那么您的子查询将不起作用
    • @Olexiy Usov 原始代码中的问题是您定义了 CTE 但没有调用它
    • @Olexiy Usov 所以你使用了我发布的代码。是吗?
    猜你喜欢
    • 2018-12-23
    • 2023-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-22
    • 1970-01-01
    相关资源
    最近更新 更多