MYSQL:在IN条件下使用变量

时间:2015-09-29 04:42:24

标签: mysql stored-procedures

[编辑] 下面的查询不是我遇到性能问题的实际查询。它只是一个简化的查询。我只想知道是否可以将多个结果存储到变量中并将该变量用于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的链接。但我无法理解。

1 个答案:

答案 0 :(得分:0)

SET @facilities = (SELECT facility_id FROM facility);

只有当您的表facility只有一条记录时,此查询才有效,否则会导致您收到的错误。目前,您的查询返回的是多条记录,您无法将其存储在变量中,从而导致错误。