是否可以根据MySQL中的查询结果设置用户变量?
我想实现的就是这样的事情(我们可以假定这两个USER和GROUP是唯一的):
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)
小智 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)
dil*_*ngh 10
首先让我们看一下如何在mysql中定义变量
要在mysql中定义变量,它应该以'@'开头,如@ {variable_name}和'{variable_name}',我们可以用变量名替换它.
现在,如何在mysql中为变量赋值.为此,我们有很多方法可以做到这一点
示例: - mysql> SET @a = 1;
示例: - mysql> @a:= 1;
示例: - mysql>选择1进入@a;
这里@a是用户定义的变量,1将在@a中分配.
现在如何获取或选择@ {variable_name}的值.
我们可以使用select语句
示例: -
mysql>选择@a;
它将显示输出并显示@a的值.
现在如何从变量中的表中分配值.
为此我们可以使用两个语句: -
@a:=(从员工中选择emp_name,其中emp_id = 1);
从员工中选择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)