关于 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/