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

我想要实现的是这样的(我们可以假设USER和GROUP都是唯一的):

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

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


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

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,可以使用=或:=作为赋值操作符。但是在其他语句中,赋值操作符必须是:=和not =,因为=在非set语句中被视为比较操作符。


更新:

除了下面的评论,你还可以做以下事情:

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

只需在查询前后加上圆括号:

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

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

查询:

SELECT a.strUserID
FROM tblUsers a
WHERE a.lngUserID = lngUserID
LIMIT 1
INTO @strUserID;

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

在mysql中定义一个变量 它应该以“@”开头,比如@{variable_name}和这个“{variable_name}”,我们可以用变量名替换它。

现在,如何在mysql变量中赋值。对于这个问题,我们有很多方法

使用关键字“SET”。

例子:-

mysql >  SET @a = 1;

不使用关键字'SET'和使用':='。

例子:-

mysql > @a:=1;

通过使用'SELECT'语句。

例子:-

mysql > select 1 into @a;

这里@a是用户定义的变量1将被分配到@a中。

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

我们可以使用select语句

例子:-

mysql > select @a;

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

现在如何在变量中为表赋值。

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

1.

@a := (select emp_name from employee where emp_id = 1);
select emp_name into @a from employee where emp_id = 1;

总是要小心emp_name必须返回一个值,否则它将在此类型语句中抛出一个错误。

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