【发布时间】:2021-10-03 16:06:56
【问题描述】:
我有两个查询是postgresql:
1. SELECT CASE WHEN (1=1) THEN NULL ELSE cast(1/0 as text) END;
2. SELECT CASE WHEN (EXISTS (SELECT 10)) THEN NULL ELSE cast(1/0 as text) END;
您可能已经注意到,两个查询中第一个条件的结果都是 true,但第一个查询的结果是 null,第二个查询的结果是 ERROR: division by zero
这里发生了什么?
评估发生的顺序是否有任何优化?如果是,有什么理由要关闭它?
为什么条件块中有一个复杂的查询,当条件结果为真时不会在 else 块中触发运行时错误?
Postgresql 版本:13.1
【问题讨论】:
-
3. SELECT CASE WHEN (SELECT 1=1) THEN NULL ELSE cast(1/0 as text) END;检查是否是短路失败的子查询。
标签: sql postgresql lazy-evaluation order-of-execution