我如何在不多次调用函数的情况下有效地多次使用MySQL查询中函数调用的结果?

我如何在不多次调用函数的情况下有效地多次使用MySQL查询中函数调用的结果?,mysql,function,call,reusability,processing-efficiency,Mysql,Function,Call,Reusability,Processing Efficiency,我有一个SQL查询,如: SELECT blah FROM table WHERE field1 % functCall(otherField1, otherField2) = 0 OR field2 % functCall(otherField1, otherField2) = 0 OR field3 % functCall(otherField1, otherField2) = 0 有没有一种方法我只能调用一次functCall,在其他两个比较中重用它的结果 谢谢 首

我有一个SQL查询,如:

SELECT blah
  FROM table
 WHERE field1 % functCall(otherField1, otherField2) = 0
    OR field2 % functCall(otherField1, otherField2) = 0
    OR field3 % functCall(otherField1, otherField2) = 0
有没有一种方法我只能调用一次functCall,在其他两个比较中重用它的结果


谢谢

首先将函数结果存储在变量中,然后在查询中使用它。

MySQL将自动优化查询,这样函数只调用一次,结果将被重用

如果希望避免重复代码,可以在派生表中计算函数,然后查询该函数

SELECT blah
FROM
(
    SELECT 
        blah, field1, field2, field3,
        functCall(otherField1, otherField2) AS f
    FROM your_table
) T1
WHERE field1 % f = 0
   OR field2 % f = 0
   OR field3 % f = 0

在from子句中使用子查询,然后检查外部查询中的条件:

 SELECT blah
 FROM
   (select functCall(f1, f2) as fc, f1, f2, f3 from table) as t 
 WHERE f1 % fc = 0
    OR f2 % fc = 0
    OR f3 % fc = 0

我想这么做,但那完全没有意义。otherField1和otherField2的值对应于查询扫描表中的行时测试的当前行的特定值。如果要生成一个变量来存储函数的输出,则必须为每行生成一个变量。对吗?