是否可以根据MySQL中的查询结果设置用户变量?
我想要实现的是这样的(我们可以假设USER和GROUP都是唯一的):
set @user = 123456;
set @group = select GROUP from USER where User = @user;
select * from USER where GROUP = @group;
请注意,我知道这是可能的,但我不希望用嵌套查询这样做。
是否可以根据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