首页 > 解决方案 > 如何更新sql中的临时变量?

问题描述

我正在尝试编写一个垄断游戏,但出现以下语法错误:

SET @Token = 'Thimble';
SET @Roll = 7;

UPDATE Players
SET Players.Jail = FALSE, @Roll = @Roll - 6
WHERE Players.Jail = TRUE AND Players.Token = @Token AND @Roll > 5;

不能将临时变量的值设置为 UPDATE 的一部分吗?我需要@roll 和 Players.Jail 仅在满足 WHERE 条件时才更新,所以我看不到单独更新它们的方法。

标签: mysqlsql

解决方案


不,您不能SET @Roll在 UPDATE 语句中。你只能SET一栏。

像您尝试做的那样对临时变量使用技巧不是一个好习惯,因为变量的评估顺序没有很好地定义。

在这种情况下,您应该这样做:

UPDATE Players
SET Players.Jail = FALSE
WHERE Players.Jail = TRUE AND Players.Token = @Token
ORDER BY ...something...
LIMIT 1;

如果没有 ORDER BY,使用 LIMIT 没有多大意义,但我无法从您的示例中看出您要更新行的顺序。


推荐阅读