当我这样做时:
SELECT id FROM table1
UNION ALL
SELECT id FROM table2
我得到了一张包含所有ID的新表,它非常完美。 但是当我尝试:
SELECT * FROM (
SELECT id FROM table1
UNION ALL
SELECT id FROM table2
)
它没有用,它没有给我任何回报。
愿任何人帮助我吗?我尝试了很多东西,这是一个非常小的代码,所以我无法理解它为什么不起作用。
非常感谢。
答案 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之前)