[编辑] 下面的查询不是我遇到性能问题的实际查询。它只是一个简化的查询。我只想知道是否可以将多个结果存储到变量中并将该变量用于IN条件。
我在下面的程序中有一个我想要更改以进行优化的程序。
SELECT * FROM request WHERE facility_id IN (SELECT facility_id FROM facility);
我想要做的是将子查询存储到变量中,并在主查询中使用该变量。
SET @facilities = (SELECT facility_id FROM facility);
SELECT * FROM request WHERE facility_id IN (@facilities);
但是我收到了错误Subquery returns more than 1 row
。我该怎么办?任何帮助表示赞赏。
我找到了一些建议http://www.mysqlperformancetuning.com/how-to-speed-up-mysql-by-optimization?nocache=1#comment-961的链接。但我无法理解。
答案 0 :(得分:0)
SET @facilities = (SELECT facility_id FROM facility);
只有当您的表facility
只有一条记录时,此查询才有效,否则会导致您收到的错误。目前,您的查询返回的是多条记录,您无法将其存储在变量中,从而导致错误。