这一直困扰我一段时间,作为一个新手我不知道我应该精确查找。经过几个小时的Google搜索后,我无法找到令人满意的答案。在另一个子查询中使用子查询结果WHERE IN(优化)
我有我已剥离和简化成为一个相对复杂的查询:
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)"
检查此链接。我希望你会有一些想法解决。 http://www.tutorialspoint.com/mysql/mysql-temporary-tables.htm –
@ V.P.Verma,谢谢。我已经考虑过临时表,但是我仍然必须在每个子查询中“选择”它们。我不认为这就是我要找的。 – Adi