2013-03-13 93 views
4

我在這個論壇上發現了類似但不是確切的問題 - 請原諒我,如果我沒有做足夠的搜索。這是我的question..in甲骨文Oracle SELECT - 另一列的別名作爲另一個輸入的

select (t.value*2) as inst2, (inst2 * 3) as inst3 
from table t; 

思維的背後是,如果f() = t.value*2是一種昂貴的調用,那麼我們就需要做出twice..or是有一個替代查詢結構我可以使用(我試圖在CTAS中實現這一點)

在此先感謝。

+0

我會檢查解釋計劃..這可能只能被優化器調用一次... – Randy 2013-03-13 15:24:29

+0

蘭迪 - 解釋計劃不是非常有用,因爲我發現了..這是誤導..我試着沿着@bluefeet建議。謝謝你的提醒。 – 2013-03-13 15:37:01

+0

乾杯塞巴斯 - 這是有益的和道歉的重複職位。我會看看另一個線程。 – 2013-03-13 15:38:28

回答

1

如果你想在第二個計算中使用別名,那麼你將要使用子查詢:

select inst2, 
    (inst2 * 3) as inst3 
from 
(
    select t.value*2 as inst2 
    from table t 
) 
+0

感謝回覆@bluefeet。我會嘗試按照這些方向進行重組。 – 2013-03-13 15:35:01

2

另一種選擇:

with cte as (
    select t.value*2 as inst2 
) 
select 
    cte.inst2, 
    (cte.inst2*3) as inst3 
from cte 

這實際上是相同bluefeet的回覆,但我會認爲使用with -syntax更容易理解。

相關問題