首页 > 解决方案 > “unionall”和“union all”的不同结果集

问题描述

为什么我们会为“unionall”和“union all”得到不同的结果集?

Select null
Union
Select null
Union all
Select null

#

Select null
Union
Select null
Unionall
Select null

标签: sql

解决方案


据我所知,UNIONALL不是任何 SQL 方言中的有效运算符/关键字。

如果您在 Microsoft SQL Server 中运行示例(为了示例),则会返回以下结果:

查询 1 - 单个结果集如下:

NULL
NULL

查询 2 - 两个结果集:

NULL

NULL

演示:https ://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=a1cde2b7af1e376fd5d9c1c780c6142b

第二个查询中发生的事情Unionall是被视为列别名。尽管您已将其写在单独的行上,但这并不重要。如果你把它写成

Select null Unionall

效果会更清楚。独立运行该行会显示它为该列命名:https ://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=cd796a0f3a16156d56d2fe3d6d5f8459

因此,您的第二个查询实际上是两个单独的查询,而不是一个联合查询。(列名不会出现在您的版本中,因为您已将它与SELECT NULL上面的另一个合并,并且合并中第一个查询的列名优先。)


推荐阅读