sql-server - Sql Server Union All 未获取所有行

标签 sql-server union except

关于 SQL Server 的简单问题。

我预计这个查询:

-- part 1    
select * from table01
except
select * from table02
--
union all
-- part 2
select * from table02
except
select * from table01

会给我相同的结果集,就像分别执行第 1 部分和第 2 部分一样。但我只从查询中得到两行,但从两个部分中得到两行。有兴趣知道为什么会发生这种情况吗?

最佳答案

except 包含两个输入的隐式 distinct 。也许,你没有想到这一点。如果没有具体的示例数据,很难判断到底发生了什么。

SELECT name FROM sys.objects
EXCEPT
SELECT name FROM sys.objects WHERE 0=1

相当于

SELECT DISTINCT name FROM sys.objects

两者都有相同的执行计划(包括不同的执行计划)。

关于sql-server - Sql Server Union All 未获取所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21933780/

相关文章:

sql - 如何在 sql server 2016 中更改 JSON 列名

sql - 使用 Union 函数创建更新查询?

php - 在 SELECT 语句中使用括号和 LIMIT 时出现错误 "A non-numeric value encountered"

java - 抛出主:NullPointerException in using CardLayout

vb.net - LINQ 除了使用自定义比较器

sql - 从相同的列但不同的条件计数

sql - 如何在 T-SQL 中更改 SQL Server 列名称?

sql-server - Sql Server 2008 R2 查询中的舍入问题

mysql - 查询以合并 mysql 上的 2 个表

c# - List<T>.Except(List<T>) 未按预期工作