【问题标题】:Sql Server Union All dont get all rowsSql Server Union All 不获取所有行
【发布时间】:2014-03-22 22:18:06
【问题描述】:

关于 SQL Server 的简单问题。

我希望这个查询:

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

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

【问题讨论】:

    标签: sql-server union except


    【解决方案1】:

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

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

    相当于

    SELECT DISTINCT name FROM sys.objects
    

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

    【讨论】:

      【解决方案2】:
      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
      

      【讨论】:

      • 谢谢。但我应该写的是 (select * from peter01 except select * from peter02) union all (select * from peter02 except select * from peter01)
      猜你喜欢
      • 1970-01-01
      • 2015-03-03
      • 2014-05-16
      • 2020-06-20
      • 1970-01-01
      • 2021-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多