我正在查询只有读权限的大型mysql数据库,我想将一些慢查询结果设置为变量'foo',这样我就可以在其他查询中再次使用它们。
基本上,我想为一个繁琐的子查询设置一个变量,所以我可以重复使用它,而不必在每次使用它时都运行它。
当我进入时:
set @foo := (select *
from table1 join table2
where bar = 0
group by id);
我得到:ERROR 1241(21000):操作数应包含1列 如果我限制为1列,则ERROR 1242(21000):子查询返回超过1行
有没有办法在变量中存储数组或表?我没有权限创建临时表。
答案 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