【问题标题】:How do I efficiently make use of the result of a function call in a MySQL query multiple times without calling the function multiple times?如何在不多次调用函数的情况下多次有效地利用 MySQL 查询中函数调用的结果?
【发布时间】:2011-05-29 02:10:22
【问题描述】:

我有一个类似的 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 function call reusability processing-efficiency


    【解决方案1】:

    在 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
    

    【讨论】:

      【解决方案2】:

      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
      

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 我想这样做,但这并不完全有意义。当查询扫描我的表中的行时,otherField1 和 otherField2 的值对应于特定于正在测试的当前行的值。如果我要创建一个变量来存储函数的输出,我必须为每一行创建一个。对吗?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-30
        • 1970-01-01
        • 1970-01-01
        • 2015-11-08
        • 1970-01-01
        相关资源
        最近更新 更多