【问题标题】:Does an AND condition in a CASE expression short circuit?CASE 表达式中的 AND 条件是否短路?
【发布时间】:2021-03-05 17:39:36
【问题描述】:

在 SQL Server 中,如果我有一个带有 2 个条件的 AND 语句 case when x>0 and y>5 then 做点什么。

如果第一个x>0条件为假,是否会执行第二个条件 或者它会停在第一个,因为对于“and”语句,两个条件都需要为真才能使整个语句为真。

select case when (ord_qty > 5 and shipped_qty > 1) then 'partially_shipped' else 'in_process' end as order_status
from order

【问题讨论】:

标签: sql sql-server tsql


【解决方案1】:

SQL 语句描述产生的结果。他们没有描述实现这些结果的方法

SQL 有许多不同的方法可以处理这样的查询。即使引擎正在执行全表扫描并评估每个条件,它也可以按照最好的顺序评估条件。一般来说,SQL 确实会做短路,这意味着如果第一个评估的条件是“假”或NULL,那么就没有理由评估第二个。

SQL Server 实际上正在执行一种称为有向无环图 (DAG) 的东西。编译器和优化器负责将查询转换为 DAG。这些组件决定了查询的执行方式。

请注意,对于您的示例,SQL 可能使用索引或分区来解析一个或多个条件——这与对每一行的过滤比较看起来完全不同。

【讨论】:

    猜你喜欢
    • 2013-01-23
    • 1970-01-01
    • 1970-01-01
    • 2018-02-18
    • 1970-01-01
    • 2013-02-24
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多