为什么 postgresql case 子句中两个逻辑上相同的条件有不同的行为?

问题描述

我有两个查询是 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;

您可能已经注意到两个查询中第一个条件的结果为真,但第一个查询的结果是 null,第二个查询的结果是 ERROR: division by zero

这里发生了什么?

在评估发生的顺序上是否有任何优化?如果是,是否有任何原因将其关闭?

当条件结果为真时,是否有任何原因在条件块中有一个复杂的查询,而不会在 else 块中触发运行时错误?

Postgresql 版本:13.1

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)