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

WHERE子句中的MySQL用户定义变量,mysql,where-clause,Mysql,Where Clause,我想知道是否有办法在WHERE子句中使用用户定义的变量,如本例所示: SELECT id, location, @id := 10 FROM songs WHERE id = @id 此查询运行时没有错误,但无法按预期工作。当然可以,但我从未见过有人像您一样尝试设置变量并在同一语句中使用它。尝试: SET @id := 10; SELECT @id := 10 FROM songs WHERE id = @id; 或 这两种方法我都用过,它们似乎都对我有用。与Mike E.的建议相去甚远,但

我想知道是否有办法在
WHERE
子句中使用用户定义的变量,如本例所示:

SELECT id, location, @id := 10 FROM songs WHERE id = @id

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

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

SET @id := 10;
SELECT @id := 10 FROM songs WHERE id = @id;


这两种方法我都用过,它们似乎都对我有用。

与Mike E.的建议相去甚远,但有一句话:

SELECT id, location FROM songs, ( SELECT @id := 10 ) AS var WHERE id = @id;
SET @id = 10;
SELECT id, location, @id FROM songs WHERE id = @id;

我使用类似的查询来模拟MySQL中的窗口函数。例如-只是在MySQL手册页面的同一条语句中使用变量的一个示例:

作为一般规则,决不应将值分配给用户变量,并在同一语句中读取该值。你可能会得到你期望的结果,但这不是保证

因此,应将赋值与select语句分开:

SELECT id, location FROM songs, ( SELECT @id := 10 ) AS var WHERE id = @id;
SET @id = 10;
SELECT id, location, @id FROM songs WHERE id = @id;
这对我有用

SET @identifier = 7;
SELECT * FROM test where identifier = @identifier;

您希望查询做什么?在实际场景中,我想定义一个变量来获取字段中子字符串的LOCATE()偏移量。我在SELECT语句中多次使用它。问题是我只想显示偏移量大于零的结果。我知道我可以在WHERE子句中使用另一个LOCATE(),但是为什么这个变量在WHERE子句中不起作用呢?FROM子句中的子查询。。。多么有用的把戏!谢谢!:)是否有任何可能的方法检查UDV是否不为null,然后触发此查询?个案解释