有没有办法在 MySQL 的一个 SELECT 查询中设置多个变量?

Posted

技术标签:

【中文标题】有没有办法在 MySQL 的一个 SELECT 查询中设置多个变量?【英文标题】:Is there a way to set multiple variables in one SELECT query in MySQL? 【发布时间】:2017-05-12 13:54:21 【问题描述】:

大家好。

在我的 SP 中,有一个这样的 SELECT 查询。

SELECT val_01, val_02 INTO var_01, var_02 FROM table_name WHERE col_name = condition_01;

此查询正常工作。

但我已经为 SQLWARNING 添加了退出处理程序,当上面的 SELECT 查询没有结果时,它会像这样发出 SQL WARNING 并停止。

无数据 - 提取、选择或处理零行

我用谷歌搜索并找到了解决此问题的方法。它正在像这样更改查询...

SELECT var_01 = val_01, var_02 = val_02 FROM table_name WHERE col_name = condition_01;

此查询有效。但是原始查询和修改后的查询之间存在差异。

在 SP 中,原始的不会抛出 SELECT 查询的结果。它只是将 SELECT 查询的值放入变量中。

但是后一个会抛出它的 SELECT 结果和变量的值。

所以我调用 SP 的 cpp 代码得到了错误的值。

我可以将查询更改为..

SET var_01 = SELECT val_01 FROM table_name WHERE col_name = condition_01;

SET var_02 = SELECT val_02 FROM table_name WHERE col_name = condition_01;

但如你所知,这是非常低效的,下面的查询不起作用。

SET var_01, var_02 = (SELECT val_01, val_02 FROM table_name WHERE col_name = condition_01);

有没有一种有效的方法可以得到与原始查询相同的结果?

请帮助我。谢谢。

【问题讨论】:

然后在您的退出处理程序中解决这个特定情况(例如,如果第一个查询没有返回任何记录,则不要退出)。 【参考方案1】:
SET @var_01 = @var_02 = '';
SELECT _val_01, _val_02 INTO @var_01, @var_02 FROM table_name WHERE col_name = condition_01;

// check whether var_01=='' or length==0 then do what you want
SELECT @var_01, @var_02
// or 
SELECT LENGTH(@var_01)

【讨论】:

您使用的是用户变量而不是本地变量 @Milor8,您的解决方案的重点是验证检查而不是语法。好的,谢谢你的建议。【参考方案2】:

选择 a, b 到 aa, bb ...

参考:见INTOhttps://dev.mysql.com/doc/refman/5.7/en/select.html

【讨论】:

我的查询使用“SELECT value_01, value_02 INTO var_01, var_02 ...”查询。正如我所提到的,它运行良好,但如果 SELECT 没有结果集,它会发出 SQLWARNING。 col_name = condition_01 满意吗? 当然。如果没有结果,“SELECT ... INTO”仍然会发出警告。【参考方案3】:

如果没有更多上下文,不清楚您要问什么,但如果您需要临时覆盖退出处理程序,请将您的查询嵌套在一个新的范围块中,并使用一个处理程序来清除变量。 (如果在循环中,它们必须被清除,否则如果被赋值,它们仍然会包含它们之前的值)。

-- inside existing procedure
BEGIN -- add this and the handler
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET var_01 = NULL, var_02 = NULL;
  SELECT val_01, val_02 INTO var_01, var_02 FROM table_name WHERE col_name = condition_01;
END; -- add this
-- procedure continues here

【讨论】:

“暂时覆盖退出处理程序”对我来说非常新鲜和有用。谢谢!!

以上是关于有没有办法在 MySQL 的一个 SELECT 查询中设置多个变量?的主要内容,如果未能解决你的问题,请参考以下文章

mysql 统计每月的数量 sql

MySQL数据表内容查询

MySQL基础(查)

在 MySQL 中使用 SELECT 语句获取表名

MySQL03Select关键字

我的mysql中的一个表有1000多条数据,搜索却只能看到500多条,急!