将查询结果分配给MySQL变量

时间:2012-12-06 05:00:32

标签: mysql sql variables mysql-error-1193

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

基本上,我想为一个繁琐的子查询设置一个变量,所以我可以重复使用它,而不必在每次使用它时都运行它。

当我进入时:

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

我得到:ERROR 1241(21000):操作数应包含1列 如果我限制为1列,则ERROR 1242(21000):子查询返回超过1行

有没有办法在变量中存储数组或表?我没有权限创建临时表。

2 个答案:

答案 0 :(得分:4)

当您在@进行操作时,

应为MySQL

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

答案 1 :(得分:1)

你也可以试试这个:

您不能将所有表存储在任何变量中,但可以使用以下查询将列数据存储在任何变量中。

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