嵌套在From子句中选择

时间:2012-01-26 21:43:47

标签: sql oracle

在SQL Server中,

您可以像这样编写嵌套SQL:

SELECT T.con
FROM (SELECT count(*) as "con" FROM EMP) AS T

通过这种方式,我可以得到一个可以嵌套到其他查询中的临时表T.

但我不能在oracle SQL中做同样的事情

它给了我ORA-01747:invalid column

SELECT *
FROM (SELECT count(*) as "con" FROM EMP) T

选择*作品,但这不是我想要的。有谁知道怎么做?

2 个答案:

答案 0 :(得分:7)

您发布的查询是否适合我,无论我是明确指定别名还是指定*。当你得到例外时,你能发布你正在运行的确切查询吗?

SQL> SELECT *
  2  FROM (SELECT count(*) as "con" FROM EMP) T;

       con
----------
        14

SQL> ed
Wrote file afiedt.buf

  1  SELECT "con"
  2* FROM (SELECT count(*) as "con" FROM EMP) T
SQL> /

       con
----------
        14

我的猜测是你试图在没有双引号的情况下选择con。如果您在Oracle中使用双引号标识符,那么您告诉Oracle您希望标识符区分大小写,这反过来意味着您始终必须以区分大小写的方式引用它,并且您必须每次用双引号括起列名。我强烈建议不要在Oracle中使用区分大小写的标识符。

答案 1 :(得分:1)

嗯,ORA-01747通常带有保留字,但据我所知con不是保留字。无论如何,试试:

select t.* 
  from (select count(*) count_emp from emp) t