我想将单个值选择为变量。我试着跟随:
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;
......就像它应该的那样工作。但是如果我一次运行每个查询,我只得到@var NULL。
答案 0 :(得分:98)
我遇到了同样的问题,但我想我知道是什么导致了混乱。如果您使用MySql查询分析器,您可以这样做:
SELECT myvalue
INTO @myvar
FROM mytable
WHERE anothervalue = 1;
但是,如果在MySql Workbench中放置相同的查询,则会引发语法错误。我不知道为什么他们会有所不同,但他们是。要解决MySql Workbench中的问题,可以像这样重写查询:
SELECT @myvar:=myvalue
FROM mytable
WHERE anothervalue = 1;
答案 1 :(得分:35)
最后,存储过程是我的问题的解决方案。这有助于:
DELIMITER //
CREATE PROCEDURE test ()
BEGIN
DECLARE myvar DOUBLE;
SELECT somevalue INTO myvar FROM mytable WHERE uid=1;
SELECT myvar;
END
//
DELIMITER ;
call test ();
答案 2 :(得分:33)
这些答案不能很好地涵盖MULTIPLE变量。
在存储过程中执行内联分配会导致这些结果也会在结果集中发回。这可能令人困惑。要使用带有多个变量的SELECT ... INTO语法:
SELECT a, b INTO @a, @b FROM mytable LIMIT 1;
SELECT必须只返回1行,因此LIMIT 1,尽管并不总是必需的。
答案 3 :(得分:18)
您也可以使用SET而不是DECLARE
SET @myvar := (SELECT somevalue INTO myvar FROM mytable WHERE uid=1);
SELECT myvar;
答案 4 :(得分:14)
Per the MySQL docs DECLARE仅在存储程序中的BEGIN ... END块的开头起作用。
答案 5 :(得分:9)
您不需要在MySQL中DECLARE变量。变量的类型在首次分配值时自动确定。其类型可以是以下之一:整数,十进制,浮点,二进制或非二进制字符串或NULL值。有关更多信息,请参阅用户定义的变量文档:
http://dev.mysql.com/doc/refman/5.0/en/user-variables.html
您可以使用SELECT ... INTO将列分配给变量:
http://dev.mysql.com/doc/refman/5.0/en/select-into-statement.html
示例:
mysql> SELECT 1 INTO @var;
Query OK, 1 row affected (0.00 sec)
mysql> SELECT @var;
+------+
| @var |
+------+
| 1 |
+------+
1 row in set (0.00 sec)
答案 6 :(得分:3)
值得注意的是,尽管您可以SELECT INTO
全局变量,例如:
SELECT ... INTO @XYZ ...
您可以不使用FETCH INTO
全局变量,例如:
FETCH ... INTO @XYZ
看起来它不是bug。我希望它对某人有帮助......
答案 7 :(得分:2)
我在Windows Vista上使用版本6(适用于Windows版本6.0.9的MySQL Workbench社区(GPL)版本11421版本1170)。我对以下选项没有任何问题。可能他们修复了它,因为这些人三年前就遇到了问题。
/* first option */
SELECT ID
INTO @myvar
FROM party
WHERE Type = 'individual';
-- get the result
select @myvar;
/* second option */
SELECT @myvar:=ID
FROM party
WHERE Type = 'individual';
/* third option. The same as SQL Server does */
SELECT @myvar = ID FROM party WHERE Type = 'individual';
上面的所有选项都给我一个正确的结果。
答案 8 :(得分:1)
您可能会错过价值前的@符号,例如select 'test' INTO @myValue
;
答案 9 :(得分:1)
对于那些现在遇到这类问题的人来说,只是尝试为表格设置一个别名,这应该是技巧,例如:
SELECT myvalue
INTO myvar
FROM mytable x
WHERE x.anothervalue = 1;
它对我有用。
干杯。