我想在不使用OR或DECODE的情况下将一个值与2个值进行比较。我想与两个值进行比较的值是我作为函数的返回码获得的值。如果我使用OR或DECODE,则必须调用函数两次,这会降低性能。目前我正在编码如下
select *
from table1 t1, table2 t1
where t1.empid = t2.empid
and myfunction(t2.balance) = t1.total OR myfunction(t2.balance) = -1
请建议是否可以调用一次函数并与2个值进行比较。
答案 0 :(得分:2)
要缩短代码,您可以使用IN
运算符,其作用类似于OR
。
select *
from table1 t1
join table2 t1 on
t1.empid = t2.empid
and myfunction(t2.balance) in (t1.total, -1)
我还用JOIN
关键字的where子句替换了老式的联接语法,建议您在以后的SQL旅程中使用它。
要知道的是,即使您两次调用了该函数,大多数现代数据库实际上也只会调用一次,因此我不会对此太在意。