MySQL:从查询结果中设置用户变量

Ava*_*vra 182 mysql

是否可以根据MySQL中的查询结果设置用户变量?

我想实现的就是这样的事情(我们可以假定这两个USERGROUP是唯一的):

set @user = 123456;
set @group = select GROUP from USER where User = @user;
select * from USER where GROUP = @group;
Run Code Online (Sandbox Code Playgroud)

请注意,我知道这是可能的,但我不希望使用嵌套查询.

Dan*_*llo 313

是的,但您需要将变量赋值移动到查询中:

SET @user := 123456;
SELECT @group := `group` FROM user WHERE user = @user;
SELECT * FROM user WHERE `group` = @group;
Run Code Online (Sandbox Code Playgroud)

测试用例:

CREATE TABLE user (`user` int, `group` int);
INSERT INTO user VALUES (123456, 5);
INSERT INTO user VALUES (111111, 5);
Run Code Online (Sandbox Code Playgroud)

结果:

SET @user := 123456;
SELECT @group := `group` FROM user WHERE user = @user;
SELECT * FROM user WHERE `group` = @group;

+--------+-------+
| user   | group |
+--------+-------+
| 123456 |     5 |
| 111111 |     5 |
+--------+-------+
2 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

请注意,for SET,=或者:=可以用作赋值运算符.但是在其他语句中,赋值运算符必须:=而不是=因为=在非SET语句中被视为比较运算符.


更新:

除了下面的评论,您还可以执行以下操作:

SET @user := 123456;
SELECT `group` FROM user LIMIT 1 INTO @group; 
SELECT * FROM user WHERE `group` = @group;
Run Code Online (Sandbox Code Playgroud)

  • 顺便说一下,你能否抑制第一个语句的输出(作为唯一的变量赋值),只显示第二个查询的输出? (3认同)
  • @Avada:用替代方案更新了我的答案,该方法不输出变量赋值的结果. (3认同)

小智 64

只需在查询周围添加括号:

set @user = 123456;
set @group = (select GROUP from USER where User = @user);
select * from USER where GROUP = @group;
Run Code Online (Sandbox Code Playgroud)

  • 这会导致“子查询返回超过 1 行” (3认同)
  • @timbroder 只需将 LIMIT 1 添加到查询中即可。无论如何,我建议进行编辑以纠正该问题。 (2认同)

dil*_*ngh 10

首先让我们看一下如何在mysql中定义变量

要在mysql中定义变量,它应该以'@'开头,如@ {variable_name}和'{variable_name}',我们可以用变量名替换它.

现在,如何在mysql中为变量赋值.为此,我们有很多方法可以做到这一点

  1. 使用关键字'SET'.

示例: - mysql> SET @a = 1;

  1. 不使用关键字'SET'并使用':='.

示例: - mysql> @a:= 1;

  1. 通过使用'SELECT'语句.

示例: - mysql>选择1进入@a;

这里@a是用户定义的变量,1将在@a中分配.

现在如何获取或选择@ {variable_name}的值.

我们可以使用select语句

示例: -

mysql>选择@a;

它将显示输出并显示@a的值.

现在如何从变量中的表中分配值.

为此我们可以使用两个语句: -

  1. @a:=(从员工中选择emp_name,其中emp_id = 1);

  2. 从员工中选择emp_name到@a,其中emp_id = 1;

一定要小心emp_name必须返回单个值,否则会在这种类型的语句中引发错误.

请参考: - http://www.easysolutionweb.com/sql-pl-sql/how-to-assign-a-value-in-a-variable-in-mysql


小智 7

使用这种方式,以便在运行存储过程时不会显示结果

查询:

SELECT a.strUserID FROM tblUsers a WHERE a.lngUserID = lngUserID LIMIT 1 INTO @strUserID;
Run Code Online (Sandbox Code Playgroud)