Sql Server Union All不会获得所有行

时间:2014-02-21 11:53:52

标签: 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部分一样。但我只从查询中获得两行,但两行中都有两行。知道为什么会发生这种情况会很有趣吗?

2 个答案:

答案 0 :(得分:3)

except包含两个输入的隐式distinct。也许,你没想到。如果没有具体的示例数据,很难说出究竟发生了什么。

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

相当于

SELECT DISTINCT name FROM sys.objects

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

答案 1 :(得分:0)

Declare @t table(col1 int)
insert into @t values(1),(2)

Declare @t1 table(col1 int)
insert into @t1 values(1),(3)

1.)  select * from @t
      except
2.)  select * from @t1
       union all
3)    select * from @t1
      except
4)    select * from @t


1 ) and 2 ) give 2
then previos result aand 3 gives 2,1,3
then again last result and 4) give 3
so final Result=3