MySQL:根据查询结果设置用户变量


195

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

我想要实现的是这样的事情(我们可以假设USERGROUP都是唯一的):

set @user = 123456;
set @group = select GROUP from USER where User = @user;
select * from USER where GROUP = @group;

请注意,我知道有可能,但我不希望使用嵌套查询。

Answers:


330

是的,但是您需要将变量分配移至查询中:

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

测试用例:

CREATE TABLE user (`user` int, `group` int);
INSERT INTO user VALUES (123456, 5);
INSERT INTO user VALUES (111111, 5);

结果:

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)

请注意,对于SET=:=可用作分配运算符。但是在其他语句中,赋值运算符必须为,:=而不是,=因为=在非SET语句中被视为比较运算符。


更新:

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

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

3
顺便说一句,您能否抑制第一条语句的输出(作为其唯一的变量赋值),而仅显示第二条查询的输出?
Avada Kedavra 2010年

3
@Avada:用替代方法更新了我的答案,该替代方法不输出变量赋值的结果。
丹尼尔·瓦萨洛

1

@DanielVassallo非常感谢您。陈述“ INTO”非常有帮助。我一直在寻找从选择设置mysql var而不返回选择。谢谢!
路易斯·安东尼奥·佩斯塔纳

68

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

set @user = 123456;
set @group = (select GROUP from USER where User = @user);
select * from USER where GROUP = @group;

Subquery returns more than 1 row对我来说是结果
timbroder

1
@timbroder只需在查询中添加LIMIT 1。无论如何,我建议进行修改以更正此错误。
Youkko

11

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

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

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

  1. 使用关键字“ SET”。

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

  1. 不使用关键字“ SET”和“:=”。

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

  1. 通过使用“ SELECT”语句。

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

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

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

我们可以使用select语句

例子:-

mysql>选择@a;

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

现在,如何从变量表中分配值。

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

  1. @a:=(从emp_id = 1的雇员中选择emp_name);

  2. 从emp_id = 1的雇员中选择emp_name到@a中;

始终要小心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;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.