我想将单个值选择为变量。我试图遵循:

DECLARE myvar INT(4);

- 立即返回一些语法错误。

SELECT myvalue 
  FROM mytable 
 WHERE anothervalue = 1;

- 返回一个整数

SELECT myvalue 
  INTO myvar 
  FROM mytable 
 WHERE anothervalue = 1;

- 不起作用,也尝试了@Myvar

是否可以在存储程序或功能之外使用声明?

也许我只是没有得到用户变量的概念...我只是尝试了:

SELECT myvalue INTO @var FROM `mytable` WHERE uid = 1;
SELECT @var;

...就像应该的那样工作。但是,如果我一次运行每个查询,我只会得到@var null。

有帮助吗?

解决方案 2

最后,存储过程是解决我问题的解决方案。这是有帮助的:

DELIMITER //
CREATE PROCEDURE test ()
  BEGIN
  DECLARE myvar DOUBLE;
  SELECT somevalue INTO myvar FROM mytable WHERE uid=1;
  SELECT myvar;
  END
  //

DELIMITER ;

call test ();

其他提示

我遇到了同一问题,但我想我知道是什么引起混乱。如果您使用MySQL查询分析仪,则可以做到这一点:

SELECT myvalue 
INTO @myvar 
FROM mytable 
WHERE anothervalue = 1;

但是,如果您在MySQL Workbench中放置了相同的查询,它将丢弃语法错误。我不知道为什么它们会有所不同,但是它们是。要解决MySQL Workbench中的问题,您可以重写这样的查询:

SELECT @myvar:=myvalue
FROM mytable
WHERE anothervalue = 1;

这些答案不能很好地涵盖多个变量。

在存储过程中执行内联作业会导致这些结果也会在结果集中发送回。那可能会令人困惑。使用SELECT ...与您执行多个变量的语法中使用:

SELECT a, b INTO @a, @b FROM mytable LIMIT 1;

选择必须仅返回1行,因此限制1,尽管这并不总是必要的。

您也可以使用设置而不是声明

SET @myvar := (SELECT somevalue INTO myvar FROM mytable WHERE uid=1);

SELECT myvar;

MySQL文档 声明仅在开始...末端块开始时,就像存储程序中一样。

您无需在MySQL中声明一个变量。当变量的类型首次分配值时,会自动确定它。它的类型可以是:整数,十进制,浮点,二进制或非二进制字符串或零值。有关更多信息,请参见用户定义的变量文档:

http://dev.mysql.com/doc/refman/5.0/en/user-variables.html

您可以使用Select ...进入将列分配给变量:

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)

值得注意的是,尽管您可以 SELECT INTO 全球变量类似:

SELECT ... INTO @XYZ ...

你可以 不是 采用 FETCH INTO 全球变量类似:

FETCH ... INTO @XYZ

看起来不是 漏洞. 。我希望这对某人有帮助...

我正在Windows Vista上使用版本6(MySQL Workbench社区(GPL),用于Windows 6.0.9修订版11421 Build 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';

上面的所有选项给我正确的结果。

您可能会在您的价值之前错过 @符号 select 'test' INTO @myValue;

对于现在在此类问题中运行的人,只需尝试为表格提供一个别名,这应该是诀窍,例如:

SELECT myvalue 
  INTO myvar 
  FROM mytable x
 WHERE x.anothervalue = 1;

它对我有用。

干杯。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top