【问题标题】:SQL Order of processingSQL 处理顺序
【发布时间】:2017-06-04 11:44:23
【问题描述】:

考虑我有一个类似的查询

select * from A
Except 
select * from B 
union all
select * from B 
except
select * from A

查询的处理方式类似于

select * 
from 
(
select * from A
Except 
select * from B 
) a
union all
(
select * from B
Except 
select * from A 
) b

sql中的处理顺序是如何定义的。无论如何都会这样处理

select * from A
Except 
select * from
(
select * from B 
union all
select * from B 
) a
except
select * from A

【问题讨论】:

    标签: sql sql-server union-all except


    【解决方案1】:

    UNIONEXCEPT 具有同等优先级,但将从左到右绑定,这意味着在处理它们时以“从左到右”的顺序计算它们。

    来自@SeanLange 的 URL (TL;DR),值得注意的是:

    如果 EXCEPTINTERSECT 与其他运算符一起使用 表达式,它在以下上下文中进行评估 优先级:

    • 括号中的表达式
    • INTERSECT 运算符
    • EXCEPTUNION 根据它们在 表达

    【讨论】:

      【解决方案2】:

      EXCEPT 和 UNION 是“从左到右”处理的。这意味着没有任何括号来确定它们将按照它们在 sql 中出现的顺序进行处理。

      https://msdn.microsoft.com/en-us/library/ms188055.aspx

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-31
        • 1970-01-01
        • 1970-01-01
        • 2011-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多