我编写的CTE看起来逻辑正确却报1054错误,请问哪里出错了?
报错原因
你定义的CTEcte1没有被加入主查询的关联关系中,数据库无法识别where子句里出现的cte1.ms字段,属于CTE的基础使用逻辑错误:CTE本质是临时结果集,和普通表的使用规则一致,要读取它的内容必须显式在FROM/JOIN子句中引用,或者通过子查询读取。
你看到的报错里的cte1.m属于字段名截断类的笔误,核心问题就是未关联cte1导致无法识别其下的字段。
解决方法
方案1:关联CTE到主查询
因为cte1只有一行结果,直接关联即可,不会产生多余数据:
with cte1 as ( select max(salary) as ms from employees ) select e.first_name, p.title from employees e -- 新增CTE关联 join cte1 join employees_projects ep on ep.employee_id = e.id join projects p on p.id = ep.project_id where e.salary > cte1.ms / 2
方案2:子查询读取CTE值
如果不想额外加关联,可以直接在条件里用子查询取cte1的最高薪资值:
with cte1 as ( select max(salary) as ms from employees ) select e.first_name, p.title from employees e join employees_projects ep on ep.employee_id = e.id join projects p on p.id = ep.project_id where e.salary > (select ms from cte1) / 2
内容的提问来源于stack exchange,提问作者Alan
相关产品推荐
相关产品推荐

