这已经困扰了我一段时间了,作为一个新手,我不确定我到底应该寻找什么。经过几个小时的谷歌搜索,我无法找到令人满意的答案。
我有一个相对复杂的查询,我已将其剥离并简化为:
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
查找匹配项的集合。
我的问题:
是否可以只执行一次这个小查询并保留该结果并重复使用它?
我能想到的唯一两件(荒谬的)事情是这样的(想象的解决方案):
temp = (SELECT field_x1
FROM table_x)
SELECT field_1
FROM table_1
WHERE field_1 IN temp
或者在客户端(运行 PHP 的网络服务器)上执行一次此查询,然后使用以下内容将结果附加到将来的查询中:
$IN_Condition = implode(',', $stmt->execute()->fetchAll(PDO::FETCH_NUM));
$sql_query = "SELECT field_1
FROM table_1
WHERE field_1 IN ($IN_Condition)"