我在这个论坛上发现了类似但不是确切的问题 - 请原谅我,如果我没有做足够的搜索。这是我的问题......在Oracle中
select ( t.value*2) as inst2, (inst2 * 3) as inst3
from table t;
背后的想法是如果f() = t.value*2
是一个昂贵的调用,那么我们不需要做两次。或者是否有一个我可以使用的替代查询结构(我试图在CTAS中实现这一点)< / p>
提前感谢。
答案 0 :(得分:2)
另一种选择:
with cte as (
select t.value*2 as inst2
)
select
cte.inst2,
(cte.inst2*3) as inst3
from cte
这实际上与bluefeet的回复相同,但我认为使用with
语法更容易理解。
答案 1 :(得分:0)
如果要在第二次计算中使用别名,则需要使用子查询:
select inst2,
(inst2 * 3) as inst3
from
(
select t.value*2 as inst2
from table t
)