Oracle /通用SQL-是否始终在所有条件检查位置?

问题描述

有一个查询,它执行以下操作:

select * from cars c where c.WheelCount > 0 or CountWheels(c) > 0

函数CountWheels是针对每一行还是仅针对t.Count <= 0的那些行?

问题是该函数包含每次都应执行的逻辑-很可能是错误的设计;这是我控制很少的代码的一部分。

这是一个简化的示例,我不能只写select * from cars c where CountWheels(c.Body) > 0,因为那样会删除一些数据。认为:给我所有曾经有车轮的汽车,即使其中一些现在可能有0个车轮。

解决方法

是对每行调用CountWheels函数,还是仅对t.Count

通常,您不会选择此选项。与过程语言相反,SQL是一种描述性语言:您指定所需的结果,并相信优化器可以选择最佳的执行计划。

可能尝试使用case表达式来影响数据库,该表达式可以更好地控制执行流程:

where case 
    when c.WheelCount   > 0 then 1
    when CountWheels(c) > 0 then 1
end = 1

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...