设置变量结果,来自查询

Posted

技术标签:

【中文标题】设置变量结果,来自查询【英文标题】:Set the variable result, from query 【发布时间】:2012-06-28 21:03:31 【问题描述】:

当我创建保存的过程时,我可以创建一些变量是吗?例如:

CREATE PROCEDURE `some_proc` ()  
BEGIN  

   DECLARE some_var INT; 
   SET some_var = 3;
....

问题:但是如何从查询中设置变量结果,即如何制作一些这样的:

DECLARE some_var INT;
SET some_var = SELECT COUNT(*) FROM mytable ;

?

【问题讨论】:

看这里,您的问题可能重复。 ***.com/questions/3888735/… 不,不是真正的重复。 ***.com/questions/3888735/… 的主题是“用户自定义变量”。这个问题是关于存储过程局部变量的。我的答案中的语法也适用于用户定义的变量,但反之则不行。 【参考方案1】:

有多种方法可以做到这一点。

您可以使用子查询:

SET @some_var = (SELECT COUNT(*) FROM mytable);

(就像你原来的一样,只需在查询周围添加括号)

或使用 SELECT INTO 语法来分配多个值:

SELECT COUNT(*), MAX(col)
INTO   @some_var, @some_other_var
FROM   tab;

子查询语法稍微快一些(我不知道为什么),但只能分配一个值。 select into 语法允许您一次设置多个值,因此如果您需要从查询中获取多个值,您应该这样做,而不是为每个变量一次又一次地执行查询。

最后,如果您的查询返回的不是单行而是一个结果集,您可以使用cursor。

【讨论】:

Roland Bouman,非常感谢,您的第二个变体正在工作,但首先不行,括号无济于事。 :) 没有。两者都有效。您一定犯了语法错误。 mysql> delimiter // mysql> 创建函数 f() -> 返回 int -> 开始 -> 声明 v int; -> set v = (select count(*) from dual); -> 返回 v; -> 结束; -> // 查询成功,0 行受影响(0.05 秒) mysql> select f(); -> // +------+ | f() | +--------+ | 1 | +-----+ 1 行 in set (0.00 sec) mysql> select version(); -> // +------------+ |版本() | +-----------+ | 5.5.20 | +-----------+ 1 行(0.00 秒) 我不知道哪里有语法错误,我没有使用“delimiter //”,这可能是我的错误,但变体“INTO”帮助了我,非常感谢。 :) @ოთოშავაძე 在 MySQL 控制台执行以下命令:set @cnt=(select count(*) from your_table); select @cnt; 他们应该可以工作。【参考方案2】:

以下 select 语句应该允许您保存 count(*) 的结果。

SELECT COUNT(*) FROM mytable INTO some_var;

【讨论】:

MySQL 允许您将 INTO 子句设置为语句末尾的最后一个子句。但是,在标准 SQL 中,它出现在 SELECT 和 FROM 子句之间。 第 5 行的错误 1327 (42000):未声明的变量:some_var。 - 我收到这个错误。如何解决这个问题。 @GauravGupta: DECLARE some_var INT;

以上是关于设置变量结果,来自查询的主要内容,如果未能解决你的问题,请参考以下文章

SQL:为啥我不能为查询结果设置变量?

查询结果设置为变量 - powershell

我可以有来自另一个表的查询变量吗? mysql

如何分离查询结果以与其他查询结果对应

查询结果为空,输出变量正确

apollo vue 查询变量无法识别来自页面变量的数据