【问题标题】:MySQL: Set user variable from result of queryMySQL:根据查询结果设置用户变量
【发布时间】:2011-04-22 18:29:16
【问题描述】:

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

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

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

请注意,我知道这是可能的,但我不希望对嵌套查询执行此操作。

【问题讨论】:

    标签: mysql


    【解决方案1】:

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

    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 语句中被视为比较运算符。


    更新:

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

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

    【讨论】:

    • 顺便说一句,你能抑制第一个语句的输出(作为它唯一的变量赋值),只显示第二个查询的输出吗?
    • @Avada:用替代方法更新了我的答案,它不会输出变量赋值的结果。
    • @DanielVassallo,还有select grop into @group from user limit 1
    • @DanielVassallo 非常感谢。声明“INTO”非常有帮助。我正在寻找从选择中设置mysql var而不返回选择。谢谢!
    【解决方案2】:

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

    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 只需将 LIMIT 1 添加到查询中。无论如何,我建议进行修改以纠正该问题。
    【解决方案3】:

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

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

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

    1. 使用关键字“SET”。

    示例:-

    mysql >  SET @a = 1;
    
    1. 不使用关键字 'SET' 并使用 ':='。

    例子:-

    mysql > @a:=1;
    
    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

    【讨论】:

      【解决方案4】:

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

      查询:

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

      【讨论】:

        猜你喜欢
        • 2021-02-11
        • 2013-03-08
        • 1970-01-01
        • 2012-06-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多