3

次のような SQL クエリがあります。

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

functCall を 1 回だけ呼び出して、その結果を他の 2 つの比較で再利用する方法はありますか?

ありがとう!

4

3 に答える 3

2

MySQL はクエリを自動的に最適化し、関数が 1 回だけ呼び出され、結果が再利用されるようにします。

コードの繰り返しを避けたい場合は、派生テーブルで関数を評価してからクエリを実行できます。

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
于 2010-12-21T21:26:49.483 に答える
0

関数の結果を最初に変数に格納してから、クエリで使用します。

于 2010-12-21T21:26:49.280 に答える
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
于 2010-12-21T21:35:55.737 に答える