2012-01-26 174 views
4

在SQL Server中,嵌套查询FROM子句

您可以编写嵌套的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 

SELECT *的作品,但它不是我想要的。任何人都知道如何去做?

回答

6

无论我明确指定别名,还是指定*,您发布的查询都可以正常工作。你能发布你正在运行的确切查询吗?

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中使用区分大小写的标识符。

+0

双引号就是答案!也许MQ-SQL不区分大小写,不需要双引号等等操作。谢谢,这有助于很多 – MildC

+0

@Justin Cave为什么我们最后需要'T'? – Geek

+0

@Geek - 别名在Oracle中并非严格需要(在其他数据库中是必需的)。尽管如此,通过SELECT来替代别名通常是一个好主意,因为这样可以在将来希望加入另一个表时更加轻松,并且当您想确保其他开发人员可以查看某个特定列即将到达哪个表时从。 –

0

那么,ORA-01747通常会发生保留字,但据我所知con不是保留字。无论如何,请尝试:

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

是的,工作,谢谢 – MildC