我正在尝试通过在线练习来学习CTE构造。
这是查询的简化版本:
with mr as
(
select min(ram)
from pc
)
select model
from pc
where ram = mr
and speed = (select max(speed) from pc where ram = mr)
它失败并显示错误:
未为“ mr”的第1列指定列名
我试图通过在聚合列中添加别名来解决问题
with mr as
(
select min(ram) as v
from pc
)
select model
from pc
where ram = mr.v
and speed = (select max(speed) from pc where ram = mr.v)
现在它失败并显示
无法绑定多部分标识符“ mr.v”
那么,为什么上述查询会产生错误,并且-编写此类查询的正确方法是什么?
答案 0 :(得分:1)
with mr as (select min(ram) minram from pc)
select model from pc
where ram=(select minram from mr)
and speed=(select max(speed) from pc where ram = (select minram from mr))
不是列,而是类似表格的查询,您必须这样引用它:
{{1}}
答案 1 :(得分:1)
如果您要查询较短的内容,则假设您要查询一行,然后使用order by
和某种形式的限制:
select pc.*
from pc
order by ram desc, speed asc
fetch first 1 row only;
答案 2 :(得分:0)
解决此问题的另一种方法是将两个子查询都定义为CTE。
with mr as (select min(ram) min_ram from pc),
ms as (select max(speed) as max_speed from pc where ram = (select minram from mr))
select pc.model
from pc
left join mr on pc.ram = mr.min_ram
left join ms on pc.speed = ms.max_speed