将查询结果赋值给MySQL变量

11

我正在使用只读权限查询一个大型的mysql数据库,并且我想将一些慢查询结果设置为变量'foo',以便我可以在其他查询中再次使用它们。

基本上,我想要一个针对繁琐子查询的变量,以便我可以重复使用它而不必每次使用它时都运行它的成本。

当我输入:

set @foo := (select *
            from table1 join table2 
            where bar = 0 
            group by id);

我收到的错误信息是:ERROR 1241 (21000): Operand should contain 1 column(s),如果我只限制为1列,会出现ERROR 1242 (21000): Subquery returns more than 1 row。

有没有一种方法可以将数组或表格存储在变量中?我没有权限创建临时表。

2个回答

4

在使用 MySQL 时,应该将 @ 放在代码中。

set @foo := (select *
            from table1 join table2 
            where bar = 0 
            group by id);

谢谢,但现在我遇到了错误:ERROR 1241 (21000):操作数应该只包含1列。当我将其限制为1列时,我得到了:子查询返回多行。 - 5un5
是的,因为@foo只能存储一个值,所以在你的SELECT语句中,你一定要知道它会返回单个值。 - John Woo
啊,我明白了。谢谢。有没有一种方法可以将查询结果的表或至少一个数组存储在变量中? - 5un5
呃,子查询至少可以做到 :D - John Woo
听起来越来越好,谢谢。 - 5un5

2

您也可以尝试这样做:

您无法将完整的表存储在任何变量中,但可以使用以下查询将列数据存储在任何变量中。

SELECT GROUP_CONCAT(col1 SEPARATOR '~~~'), GROUP_CONCAT(col2 SEPARATOR '~~~'), ... INTO @foo, @foo2, ...
FROM table1 JOIN table2 
WHERE bar = 0 
GROUP BY id;

或者

select col1, col2, ... into @foo, @foo2, ...
from table1 join table2 
where bar = 0 
group by id

当我尝试使用以下语句时,它可能会有所帮助,但我仍然会收到ERROR 1172 (42000):Result consisted of more than one row的错误提示:SELECT pid INTO @foo table1 join table 2 bar = 0 group by pid。 - 5un5
请提供此查询的输出结果(SELECT id, pid FROM table1 JOIN table2 WHERE bar = 0 GROUP BY id),并且明确说明您需要的输出结果是什么。 - Saharsh Shah
我只需要样本数据和查询生成的实际输出格式。因此,请提供例如10行的样本数据以及这10行的输出应该是什么。 - Saharsh Shah
SELECT id, pid FROM table1 JOIN table2 WHERE bar = 0 GROUP BY id 会生成两列数字。您可以将其粘贴到文本编辑器中查看表格: +------+-----+ | pid | id | +------+-----+ | 2345 | 678 | +------+-----+ | 2346 | 670 | +------+-----+ | 2355 | 378 | +------+-----+ | 21375| 5 | +------+-----+ | 25 | 608 | +------+-----+ - 5un5
让我们在聊天中继续这个讨论。 (http://chat.stackoverflow.com/rooms/20677/discussion-between-5un5-and-saharsh-shah) - 5un5
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接