是否可以根据MySQL中的查询结果设置用户变量?MySQL:根据查询结果设置用户变量
我想达到的目标是这样的(我们可以假定这两个USER
和GROUP
是唯一的):
set @user = 123456;
set @group = select GROUP from USER where User = @user;
select * from USER where GROUP = @group;
请注意,我知道这是可能的,但我不希望使用嵌套做到这一点查询。
是否可以根据MySQL中的查询结果设置用户变量?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
,无论是可以使用=
或:=
作为分配运营商。但是在其他语句中,赋值运算符必须是:=
而不是=
,因为=
在非SET语句中被视为比较运算符。
UPDATE:
而且到下面的评论,你也可以做到以下几点:
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;
穆罕默德·哈桑(Rupam)
首先让我们来看看我们如何定义MySQL中的变量
要定义在MySQL 它varible应该以'@'开始,如@ {variable_name}和这个'{variable_name}',我们可以用我们的变量名替换它。
现在,如何在mysql中为变量赋值。为此我们有很多方法可以做到这一点
例如: - mysql> SET @a = 1;
例如: - mysql> @a:= 1;
例如: - mysql> select 1 into @a;
这里@a是用户定义的变量,1将在@a中分配。
现在如何获取或选择@ {variable_name}的值。
我们可以使用select语句像
例子: -
的mysql>选择@a;
它会显示输出并显示@a的值。
现在如何从变量中的表中分配一个值。
为此,我们可以使用两个语句,如: -
@a:=(从选择employee 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
顺便说一句,你能抑制第一条语句的输出(作为其唯一的变量赋值),并只显示第二查询的输出? – 2010-10-08 08:15:04
@Avada:用另一种方法更新了我的答案,该方法不会为变量赋值输出结果。 – 2010-10-08 08:19:22
丹尼尔现货。谢谢! – 2010-10-08 09:14:32