2012-01-26 227 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