从SQL中的UNION ALL中选择

时间:2014-07-22 22:21:37

标签: sql sql-server union

当我这样做时:

SELECT id FROM table1
UNION ALL
SELECT id FROM table2

我得到了一张包含所有ID的新表,它非常完美。 但是当我尝试:

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

它没有用,它没有给我任何回报。

愿任何人帮助我吗?我尝试了很多东西,这是一个非常小的代码,所以我无法理解它为什么不起作用。

非常感谢。

2 个答案:

答案 0 :(得分:4)

您缺少派生结果集的别名。请尝试以下

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

这适用于MSSQL,MySQL,但是在为Oracle进行别名处理时需要删除“AS”。

答案 1 :(得分:1)

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

不同的数据库有关于为内联视图或派生表(from子句中的子查询)提供别名的不同规则

Oracle对您发布的查询没有任何问题。

MySQL,SQL Server,PostgreSQL会。他们需要别名。

更糟糕的是使用AS关键字。有些数据库可以使用它,有些则没有。如果在上面的查询中你使用“as t”,那么Oracle WOULD会抛出一个错误。任何数据库都不需要AS关键字,但有些数据库不接受它(因此一般来说,最好不要在FROM子句中使用AS与实际表或内联视图)。

最安全的解决方案如下:

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

因为它可以在任何数据库中使用。 (注意AS关键字不在t之前)