gpt4 book ai didi

sql - Oracle/general sql - 总是检查所有条件吗?

转载 作者:行者123 更新时间:2023-12-01 23:51:35 24 4
gpt4 key购买 nike

有一个查询做这样的事情:

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 个轮子。

最佳答案

Is the function CountWheels called for every row, or just for those rows where t.Count <= 0 ?

一般来说,你不能选择这个。 SQL 是一种描述性语言,而不是过程性语言:您指定所需的结果,并且相信优化器会选择最佳的执行计划。

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

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

关于sql - Oracle/general sql - 总是检查所有条件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63392788/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com