我想在一个变量中选择一个值。我试着这样做:
DECLARE myvar INT(4);
--立即返回一些语法错误。
SELECT myvalue
FROM mytable
WHERE anothervalue = 1;
--返回单个整数
SELECT myvalue
INTO myvar
FROM mytable
WHERE anothervalue = 1;
--不起作用,还尝试了@myvar
可以在存储过程或函数之外使用DECLARE吗?
也许我只是不理解用户变量的概念……我刚试过了:
SELECT myvalue INTO @var FROM `mytable` WHERE uid = 1;
SELECT @var;
...which的工作就像它应该做的那样。但是如果我一次运行每个查询,我只会得到@var NULL。
发布于 2010-06-19 19:57:36
最后,存储过程是我的问题的解决方案。
以下是有用的信息:
DELIMITER //
CREATE PROCEDURE test ()
BEGIN
DECLARE myvar DOUBLE;
SELECT somevalue INTO myvar FROM mytable WHERE uid = 1;
SELECT myvar;
END//
DELIMITER ;
call test();
发布于 2011-09-08 02:46:35
我遇到了同样的问题,但我想我知道是什么导致了混乱。如果您使用MySQL查询分析器,则可以很好地完成以下操作:
SELECT myvalue
INTO @myvar
FROM mytable
WHERE anothervalue = 1;
但是,如果您将相同查询放在MySQL工作台中,它将抛出语法错误。我不知道它们为什么会不同,但它们确实不同。
要在MySQL工作台中解决此问题,您可以像这样重写查询:
SELECT @myvar:=myvalue
FROM mytable
WHERE anothervalue = 1;
发布于 2014-09-10 05:51:41
这些答案不能很好地涵盖多变量。
在存储过程中执行内联赋值会导致这些结果也在结果集中传回。这可能会让人感到困惑。要对多个变量使用SELECT...INTO语法,需要执行以下操作:
SELECT a, b INTO @a, @b FROM mytable LIMIT 1;
SELECT必须只返回1行,因此限制为1,尽管这并不总是必要的。
https://stackoverflow.com/questions/3075147
复制相似问题