可以在WHERE子句中使用MySQL临时变量吗?

Leo*_*los 4 mysql variables temporary where where-clause

在MySQL中,可以在WHERE子句中使用临时变量吗?

例如,在以下查询中:

SELECT `id`, @var := `id` * 2 FROM `user`
Run Code Online (Sandbox Code Playgroud)

@var成功设置为`id`值的两倍

但是,如果我尝试将结果集过滤为仅包含@var小于10的结果:

SELECT `id`, @var := `id` * 2 FROM `user` WHERE @var < 10
Run Code Online (Sandbox Code Playgroud)

然后我没有结果.

如何根据@var的值过滤结果?

Bar*_*mar 14

您需要分配别名,并在HAVING子句中对其进行测试:

SELECT id, @var := id * 2 AS id_times_2
FROM user
HAVING id_times_2 < 10
Run Code Online (Sandbox Code Playgroud)

请注意,如果您只是使用公式进行过滤,而不是将内部结果从一行传递到下一行,则根本不需要变量.你可以写:

SELECT id, id * 2 AS id_times_2
FROM user
HAVING id_times_2 < 10
Run Code Online (Sandbox Code Playgroud)