关于SQL Server的简单问题。
我期待这个查询:
-- part 1
select * from table01
except
select * from table02
--
union all
-- part 2
select * from table02
except
select * from table01
会给我相同的结果集,就像分别做两个第1部分和第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