2008-10-30 196 views
1

在MS SQL 2005或T-SQL,你可以這樣做:選擇從嵌套查詢在Oracle 9i

SELECT T.NAME, T.DATE 
    FROM (SELECT * FROM MyTable WHERE ....) AS T 

我沒有嘗試在Oracle 9i上DB類似SQL。在MS SQL中,嵌套SQL被視爲一個臨時/動態視圖,並在之後被銷燬。我如何在Oracle中做類似的事情?我真的不想創造一個觀點來做到這一點。

回答

6

我相信它是扼殺在「爲」。

SELECT T.NAME, T.DATE 
    FROM (SELECT * FROM MyTable WHERE ....) T 

應該工作。

3

您需要更改的唯一方法是刪除關鍵字「AS」。 Oracle僅將它用於列別名(例如SELECT dummy AS some_name FROM dual),儘管如此,您並不需要它。

0

如果你真的需要創建一個臨時的,物理的結果集,那麼你會做一個子查詢分解子句:

with t as 
(SELECT /*+ materliaze */ 
     * 
FROM MyTable 
WHERE ....) 
SELECT T.NAME, T.DATE 
FROM T 
/

它通常是除特定情況外不值得在優化程序的準確估計查詢中的中間結果集對於高效的執行計劃非常重要,在這種情況下,可以使用動態採樣來查看結果集的大小,或者在查詢的其餘部分中多次使用計算結果集。

您應該能夠放棄AS,並且如果安全的話,Oracle將在邏輯上將嵌入式視圖合併到主查詢中。