• 解决半岛问题 中美对话合作必不可少 2019-03-21
  • 阳泉计划今年在全省率先整体脱贫 2019-03-21
  • 《王者荣耀》Switch版正式公布 今年秋季推出 2019-03-16
  • 十多次告病危 2岁高危白血病男童盼来“生命火种” 2019-03-16
  • 摄艳|本网摄影师赤壁、竹林创作人像尽显侠客风 2019-03-16
  • 我在吃饭,重点在那?重点在饭,难道我只能吃饭吗?看着就想笑 2019-03-10
  • 人民日报社习近平新闻思想理论研讨会发言摘编 2019-03-10
  • 建始白云草地音乐节:醉了游人,火了产业,牵动慈善 2019-03-01
  • “直播政务述职”是与民沟通良机 2019-02-22
  • 熊猫启航计划即将启动 让世界聆听大熊猫声音 2018-12-28
  • 三星侵犯一大学专利 被判支付罚金4亿美元 2018-12-04
  • 以政府拟严打“乱拍摄”以军行为 最高10年监禁 2018-12-04
  • 今天看啥
      热点:

        新疆35选7的开奖号 www.ts3ne.com

        使用 Except 和 Intersect,exceptintersect


        做了一个如下的小厕所,如果我需要得到返回是 d,f 那我需要用那组语句呢?

        A:

        ;WITH CA AS(
        SELECT *
            FROM (VALUES('a'),('b'),('c'),('d'))a (A))
        ,CB AS (
        SELECT *
            FROM (VALUES('a'),('b'),('c'),('f'))a (A)
        )
        SELECT * FROM CA
        EXCEPT SELECT * FROM CB
        UNION 
        SELECT * FROM CB
        EXCEPT SELECT * FROM CA

        B:

        ;WITH CA AS(
        SELECT *
            FROM (VALUES('a'),('b'),('c'),('d'))a (A))
        ,CB AS (
        SELECT *
            FROM (VALUES('a'),('b'),('c'),('f'))a (A)
        )
        SELECT * FROM CA
        EXCEPT SELECT * FROM CB
        UNION 
        (SELECT * FROM CB
        EXCEPT SELECT * FROM CA)

         C:

        ;WITH CA AS(
        SELECT *
            FROM (VALUES('a'),('b'),('c'),('d'))a (A))
        ,CB AS (
        SELECT *
            FROM (VALUES('a'),('b'),('c'),('f'))a (A)
        )
        (SELECT * FROM CA
        EXCEPT SELECT * FROM CB)
        UNION 
        (SELECT * FROM CB
        EXCEPT SELECT * FROM CA)

         

         实际情况执行一下就知道,其实BC 的语句都可以执行。而A的执行情况就是只返回了 d。这个其实是跟select 的执行顺序有关的。

        通常我们看select 的执行顺序的时候,可能会忽略这2个不常用的连接谓词导致误判。这里做一个实验就可以发现,其实 Except(Intersect 同理) 的查询优先级是和 union 或者union all 是同级的。

        所以遵循从左到右的顺序,如果不用括号改变执行顺序,从上面的例子,将会返回  CA Except CB -> Union CB -> Except CA 的执行结果。也就是一个容易忽略的位置。

        因为比较少用,所以我也躺枪了。在此分享一波,希望大家不要踩坑。

        PS

        1 select 执行顺序的地址 :https://docs.microsoft.com/zh-cn/sql/t-sql/queries/select-transact-sql

        2 Except 和 Intersect 都是返回交叉之后不重复的结果的,这个需要特别注意

         

        新疆35选7的开奖号 www.ts3ne.comtrue//www.ts3ne.com/Sql_Server/1316376.htmlTechArticle使用 Except 和 Intersect,exceptintersect 做了一个如下的小厕所,如果我需要得到返回是 d,f 那我需要用那组语句呢? A: ; WITH CA AS ( SELECT * FRO...

        相关文章

          暂无相关文章
        相关搜索:

        帮客评论

        视觉看点
      • 解决半岛问题 中美对话合作必不可少 2019-03-21
      • 阳泉计划今年在全省率先整体脱贫 2019-03-21
      • 《王者荣耀》Switch版正式公布 今年秋季推出 2019-03-16
      • 十多次告病危 2岁高危白血病男童盼来“生命火种” 2019-03-16
      • 摄艳|本网摄影师赤壁、竹林创作人像尽显侠客风 2019-03-16
      • 我在吃饭,重点在那?重点在饭,难道我只能吃饭吗?看着就想笑 2019-03-10
      • 人民日报社习近平新闻思想理论研讨会发言摘编 2019-03-10
      • 建始白云草地音乐节:醉了游人,火了产业,牵动慈善 2019-03-01
      • “直播政务述职”是与民沟通良机 2019-02-22
      • 熊猫启航计划即将启动 让世界聆听大熊猫声音 2018-12-28
      • 三星侵犯一大学专利 被判支付罚金4亿美元 2018-12-04
      • 以政府拟严打“乱拍摄”以军行为 最高10年监禁 2018-12-04