これはしばらくの間私を悩ませてきました。初心者として、正確に何を探すべきかわかりません。数時間のグーグル検索の後、満足のいく答えを見つけることができませんでした。
私は比較的複雑なクエリを持っていますが、それを取り除いて単純化して次のようにしました。
SELECT field_a1,
field_a2,
(SELECT Count(*)
FROM table_b
WHERE field_b1 IN (SELECT field_x1
FROM table_x) AND field_b2 = 1) AS new_field_1,
(SELECT Count(*)
FROM table_c
WHERE field_c1 IN (SELECT field_x1
FROM table_x) AND field_c2 = 2) AS new_field_2,
(SELECT Count(*)
FROM table_d
WHERE field_d1 IN (SELECT field_x1
FROM table_x) AND field_d2 = 3) AS new_field_3
FROM table_a
WHERE field_a1 IN (SELECT field_x1
FROM table_x)
元のクエリでは、約 30 個ありnew_field_*
ます。すべてがうまく機能しているようで、非常に満足のいく結果 (最終結果とパフォーマンス) が得られています。
私の問題は、このクエリです:
SELECT field_x1
FROM table_x
はかなりの回数 (30 * 返される行数) 繰り返され、 がWHERE IN
一致を検索するセットとして常に使用されます。
私の質問:
この小さなクエリを 1 回だけ実行し、その結果を保持して繰り返し使用することは可能ですか?
私が考えることができた唯一の(ばかげた)ことは、次のようなものでした(想像上の解決策):
temp = (SELECT field_x1
FROM table_x)
SELECT field_1
FROM table_1
WHERE field_1 IN temp
または、このクエリをクライアント側 (PHP を実行している Web サーバー) で 1 回実行し、次のようなものを使用して結果を将来のクエリに追加します。
$IN_Condition = implode(',', $stmt->execute()->fetchAll(PDO::FETCH_NUM));
$sql_query = "SELECT field_1
FROM table_1
WHERE field_1 IN ($IN_Condition)"