Как эффективно использовать результат вызова функции в запросе MySQL несколько раз, не вызывая функцию несколько раз? - PullRequest
3 голосов
/ 22 декабря 2010

У меня есть SQL-запрос вроде:

SELECT blah
  FROM table
 WHERE field1 % functCall(otherField1, otherField2) = 0
    OR field2 % functCall(otherField1, otherField2) = 0
    OR field3 % functCall(otherField1, otherField2) = 0

Есть ли способ, которым я могу вызвать functCall только один раз, повторно используя его результат в двух других сравнениях?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 22 декабря 2010

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
0 голосов
/ 22 декабря 2010

Используйте подзапрос в предложении 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
0 голосов
/ 22 декабря 2010

Сохраните результат функции в переменной, прежде чем использовать ее в своем запросе.

...