2013-10-07 178 views
1

我想別名一個查詢的結果,並在另一個查詢中使用別名。舉個簡單的例子,如:Oracle別名查詢結果

(select a from foo) as fooResults; 

select b from bar 
    where b in fooResults; 

這個語法不起作用,很清楚。有沒有辦法使用vanilla Oracle SQL來完成這個任務?如果它需要PL/SQL,那麼語法是什麼?搜索結果似乎都指向列或表別名。

編輯:一個驅動因素是我希望能夠在稍後的幾個查詢中使用fooResults,如果可能的話。

+0

您是否嘗試將'fooResults'查詢移至where子句中的第二個查詢? '從b中選擇b from b where(從foo中選擇a)' – Taryn

+0

我認爲它,但我不希望它作爲同一查詢的一部分。理想情況下,我將能夠引用來自多個其他查詢的別名查詢,而不必重寫它。 – Travis

回答

4

有幾個選項。最乾淨的,假設你想保留的別名,可能是使用WITH條款

WITH fooResults 
    AS(SELECT a 
     FROM foo) 
SELECT b 
    FROM bar 
WHERE b IN (SELECT a 
       FROM fooResults) 

如果你想使用多個查詢表達式,你會切實要定義fooResults作爲視圖。

無論fooResults是一個視圖,內嵌視圖,或在WITH條款定義的子查詢,不過,你必須從SELECT在你IN條款。無論如何定義fooResults,您都無法做到WHERE b IN fooResults

+0

這非常有幫助,謝謝。你有什麼建議可以使fooResults可用於多個查詢,還是我需要將它定義爲一個過程? – Travis

+0

另外,有沒有一種方法可以直接說「fooResults中的哪個b」,而無需定義一個迷你子查詢? – Travis

+0

@Travis - 更新了我的答案。 –