我在SQL Server 2008 R2中有两个具有相同架构的表。如果我执行以下查询,括号保持不变,我会从两个表中得到结果。
/*
select distinct Name, Rank, SerNo, OtherStuff from
*/
(
select Name, Rank, SerNo, OtherStuff from OldPlayers
union
select Name, Rank, SerNo, OtherStuff from NewPlayers
)
/*
OldPlayers
*/
go
如果我然后取消注释两个注释,并在括号中注释掉表达式,我也会得到结果(当然,从一个表中)。
如果我现在在最后重新评论表名,并取消注释括号表达式以便它可以替换表名,我会收到错误“语法不正确')'”。
为什么我不能用union表达式替换表名?
答案 0 :(得分:4)
如果您这样尝试:
select Name, Rank, SerNo, OtherStuff from
(
select Name, Rank, SerNo, OtherStuff from OldPlayers
union
select Name, Rank, SerNo, OtherStuff from NewPlayers
) as Players
答案 1 :(得分:1)
我没有方便的SQL Server副本,但是当您将表的表达式用作查询的一部分时,情况并非如此 - 语法要求您命名结果表(除非它是查询的最外层部分,这样表名称将引用表本身)?因此,如果您使用“选择1”(我相信这是合法的)而不是联合查询,您仍然必须命名生成的“表”。
所以,
select distinct Name, Rank, SerNo, OtherStuff from
(
select Name, Rank, SerNo, OtherStuff from OldPlayers
union
select Name, Rank, SerNo, OtherStuff from NewPlayers
) SYNTAXREQUIRESTABLENAME
应该有用。