2014-07-22 126 views
0

當我做:從UNION ALL SELECT在SQL

SELECT id FROM table1 
UNION ALL 
SELECT id FROM table2 

我得到一個新的表,所有的ID,它是完美的。 但是,當我嘗試:

SELECT * FROM (
       SELECT id FROM table1 
       UNION ALL 
       SELECT id FROM table2 
       ) 

它不工作,它不返回我什麼。

有人可以幫助我嗎?我嘗試了很多東西,這是一個非常小的代碼,所以我不明白爲什麼它不起作用。

非常感謝。

+0

您忘記了聯合結果集的別名。 – Mez

+1

您使用的是哪個數據庫? Oracle不會要求別名。大多數數據庫確實需要內聯視圖的別名 –

+0

是的,別名是答案,非常感謝。 – Clm

回答

2

您缺少派生結果集的別名。請嘗試以下方法

SELECT * FROM (
       SELECT id FROM table1 
       UNION ALL 
       SELECT id FROM table2 
       ) as t 

這將適用於MSSQL,MySQL,但是在爲Oracle進行別名時需要刪除「AS」。

+0

非常感謝,別名是做這件事的好方法。 而根據@paqomogez,'t.'是可選的。非常感謝 ! – Clm

+0

很高興我幫了忙。請記住,如果答案解決了您的問題,請務必將其標記爲答案。 – Mez

1

http://blog.mclaughlinsoftware.com/2012/06/23/derived-table-aliases/

不同的數據庫有大約(from子句中的子查詢)給出的別名內嵌視圖或派生表不同的規則

甲骨文不會有與您發佈的查詢的任何問題。

MySQL,SQL Server,PostgreSQL會。他們需要別名。

更壞的是使用AS關鍵字。有些數據庫可以使用它,其他數據庫則沒有。如果在上面的查詢中使用了「as t」,Oracle會拋出一個錯誤。 AS關鍵字在任何數據庫中都不是必需的,但有些數據庫不會接受它(所以普遍而言,最好不要在FROM子句中將AS用於實際表或內聯視圖)。

最安全的解決方案是:

SELECT * FROM (
       SELECT id FROM table1 
       UNION ALL 
       SELECT id FROM table2 
       ) t 

因爲它會在任何數據庫。 (請注意,AS關鍵字不在t之前)