在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
选择*作品,但这不是我想要的。有谁知道怎么做?
答案 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