クエリの選択基準でテーブルのデータを使用する必要がある自己参照 SQL ステートメントの最適化に問題があります。
これは、ローカル変数を使用した例です。
SET @target_crit = (SELECT crit from table1 where id = 57)
SELECT *
FROM table1
WHERE
(@target_crit + crit > 100) AND
(@target_crit * critb < 500) AND
(@target_crit * critc >255)
ローカル変数を使用せずに複数の SELECT を使用する同じ例を次に示します。
SELECT *
FROM table1
WHERE
((SELECT crit from table1 where id = 57) + crit > 100) AND
((SELECT crit from table1 where id = 57)* critb < 500) AND
((SELECT crit from table1 where id = 57)* critc >255)
どちらも機能しますが、2 番目のクエリを最適化して、それらの SELECT がすべて不要になるようにする方法はありますか? CROSS JOIN のように見えますが、特定の列に参加していません。
これは MySQL であり、実際のクエリでは WHERE 句に 8 つの計算がありますが、例では 4 つしかありません。データ テーブルには約 100,000 のレコードがあります。
ありがとう!