WHERE子句中的MySQL用户定义变量

Pau*_*tas 17 mysql where-clause

我想知道是否有一种方法可以在WHERE子句中使用用户定义的变量,如下例所示:

SELECT id, location, @id := 10 FROM songs WHERE id = @id
Run Code Online (Sandbox Code Playgroud)

此查询运行时没有错误,但无法按预期工作.

Max*_*xym 22

离Mike E.提出的建议不远,但有一条声明:

SELECT id, location FROM songs, ( SELECT @id := 10 ) AS var WHERE id = @id;
Run Code Online (Sandbox Code Playgroud)

我使用类似的查询来模拟MySQL中的窗口函数.例如行采样 - 只是在同一语句中使用变量的示例


ste*_*red 11

用户定义变量的MySQL手册页:

作为一般规则,您不应该为用户变量赋值并在同一语句中读取值.您可能会得到您期望的结果,但这不能保证.

所以你应该将赋值与select语句分开:

SET @id = 10;
SELECT id, location, @id FROM songs WHERE id = @id;
Run Code Online (Sandbox Code Playgroud)


小智 5

可以,但是我从未见过有人尝试设置变量并像您一样在同一条语句中使用它。尝试:

SET @id := 10;
SELECT @id := 10 FROM songs WHERE id = @id;
Run Code Online (Sandbox Code Playgroud)

要么

SELECT @id := 10 FROM songs;
SELECT @id := 10 FROM songs WHERE id = @id;
Run Code Online (Sandbox Code Playgroud)

我都用过,它们似乎都对我有用。