10

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

基本上,我想要一个用于繁琐子查询的变量,这样我就可以重用它,而无需每次我想使用它时都运行它。

当我输入:

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

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

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

4

2 回答 2

4

应该是@在你做的时候MySQL

set @foo := (select *
            from table1 join table2 
            where bar = 0 
            group by id);
于 2012-12-06T05:01:10.780 回答
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
于 2012-12-06T05:10:19.130 回答