Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 基本SQL union all as tmp_Sql Server_Select_Sql Server 2012 - Fatal编程技术网

Sql server 基本SQL union all as tmp

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,是的,内联视

不熟悉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,是的,内联视图需要别名。如果省略别名,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等都可以遵循这种模式。