Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将查询结果分配给MySQL变量_Mysql_Sql_Variables_Mysql Error 1193 - Fatal编程技术网

将查询结果分配给MySQL变量

将查询结果分配给MySQL变量,mysql,sql,variables,mysql-error-1193,Mysql,Sql,Variables,Mysql Error 1193,我正在查询一个只有读取权限的大型mysql数据库,我想将一些较慢的查询结果设置为变量“foo”,以便在其他查询中再次使用它们 基本上,我希望为一个繁琐的子查询提供一个变量,这样我就可以重用它,而无需每次使用时都运行它 当我进入时: set @foo := (select * from table1 join table2 where bar = 0 group by id); I get:ERROR 1241 2100

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

基本上,我希望为一个繁琐的子查询提供一个变量,这样我就可以重用它,而无需每次使用时都运行它

当我进入时:

set @foo := (select *
            from table1 join table2 
            where bar = 0 
            group by id);
I get:ERROR 1241 21000:操作数应包含1列 如果我限制为1列,错误1242 21000:子查询返回的行数超过1行

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

在MySQL中创建临时表时应该是@


您也可以尝试以下方法:

不能在任何变量中存储完整表,但可以使用以下查询在任何变量中存储列数据

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


谢谢,但现在我得到:ERROR 1241 21000:操作数应该包含1列。当我将其限制为1列时,我得到:Subquery返回多于1行。是的,因为@foo只能存储一个值。所以在SELECT语句中,您应该明确知道它将返回单个值。啊,我明白了。谢谢有没有一种方法可以将一个表或至少一个数组的查询结果存储在一个变量中?嗯,子查询至少可以做到:数据搜索越来越好,感谢感谢感谢-太多的数据使这一个无法工作,但可能用于较小的任务。这会很有帮助,但我仍然得到错误1172 42000:当我尝试它时,结果由多行组成:选择pid到@foo table1连接表2 bar=0按pid组\u concat函数分组,以获取一个变量中的所有行数据,正如我在回答中已经定义的那样。From:SELECT group\u CONCATpid SEPARATOR'~~'到@foo From table1连接表2,其中bar=0;我得到错误117242000:结果由多行组成。对于2列,我得到了相同的错误。请提供此查询的输出选择id,pid从table1连接table2,其中bar=0按id分组,并提供您确切需要的输出。
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