从Oracle 9i中的嵌套查询中进行选择

时间:2008-10-30 19:24:35

标签: oracle plsql

在MS SQL 2005或T-SQL中,您可以执行以下操作:

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

我没能在Oracle 9i DB上尝试类似的SQL。在MS SQL中,嵌套SQL被视为在fly上创建的临时/动态视图,之后被销毁。我怎样才能在Oracle中做类似的事情?我真的不想创建一个视图来做它。

3 个答案:

答案 0 :(得分:6)

我相信它会在“as”上窒息。

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

应该有用。

答案 1 :(得分:3)

您需要更改的唯一内容是删除关键字“AS”。 Oracle仅将其用于列别名(例如SELECT dummy AS some_name FROM dual),尽管即便如此,您也不需要它。

答案 2 :(得分:0)

如果你真的需要创建一个临时的物理结果集,那么你可以使用子查询因子子句来做到这一点:

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

除了优化程序对查询中的中间结果集的准确估计对于高效执行计划至关重要的特定情况之外,通常不值得,在这种情况下,可以使用动态采样来查看结果集的大小,或者在查询的其余部分多次使用计算结果集。

您应该能够删除AS,如果可以安全地将Oracle内联视图合并到主查询中。