Sql server 基本SQL union all as tmp
不熟悉SQL,对非常基本的union all语句有一个一般性问题。我正在看一段代码,看起来像这样:Sql server 基本SQL union all as tmp,sql-server,select,sql-server-2012,Sql Server,Select,Sql Server 2012,不熟悉SQL,对非常基本的union all语句有一个一般性问题。我正在看一段代码,看起来像这样: select * into ConsolidatedTable from (select * from Table1 union all select * from Table2 union all select * from Table3) as tmp; 是否需要“作为tmp”?若然,原因为何 谢谢 对于SQL Server,是的,内联视
select *
into ConsolidatedTable
from
(select * from Table1
union all
select * from Table2
union all
select * from Table3) as tmp;
是否需要“作为tmp”?若然,原因为何
谢谢 对于SQL Server,是的,内联视图需要别名。如果省略别名,SQL Server将抛出一个错误 别名前的
AS
关键字是可选的,不是必需的
(我个人的偏好是,对于表/视图别名,省略AS
关键字,对于列别名,总是包含AS
关键字。)
表/视图别名的
AS
关键字在SQL Server中是可选的。(它不是ANSI SQL标准的一部分。)某些数据库(如Oracle)不接受表或视图别名前面的作为
关键字,如果包含该关键字,则会抛出错误
某些数据库(如MySQL和SQL Server)要求将别名分配给内联视图。内联视图(例如Oracle)中不需要别名的数据库允许使用别名,而分配别名则允许我们限定外部查询中的列引用。由于限定列引用是我们的常规模式,因此将别名指定给内联视图也是我们的常规模式,即使对于不需要别名的数据库也是如此
请注意,别名的分配与内联视图查询中
UNION ALL
的使用无关。tmp称为别名。这是必需的,因为否则内联视图中的列(所有封装在parantesse中的代码)在查询的其余部分将变得“不可访问”,因为在中,您将无法引用它们
它可以有任何你想要的名字,它只是用于进一步的参考
而且,为了回答你的最后一个问题,是否需要“作为tmp”?-因为这是sql server,所以您可以直接编写别名,而不必使用'as'-so
)tmp
就足够了。这是一个别名。你可以选择任何名字。。也可能是戴夫。。但是你应该给化名作为保证,谢谢你,但是有必要吗?如果“as tmp”不存在会发生什么?将在“')附近抛出一个错误。当您有多个表时,别名会消除歧义,因为您知道它来自哪个表。明白了,所以最后一行代码可以是:select*from table 3)tmp?@Dave是的,没错。SQL Server、Oracle、MySQL等都可以遵循这种模式。