【发布时间】:2014-08-28 06:38:45
【问题描述】:
在MySQL中,可以在WHERE子句中使用临时变量吗?
例如,在以下查询中:
SELECT `id`, @var := `id` * 2 FROM `user`
@var 成功设置为 `id` 值的两倍
但是,如果我尝试过滤结果集以仅包含 @var 小于 10 的结果:
SELECT `id`, @var := `id` * 2 FROM `user` WHERE @var < 10
然后我没有得到任何结果。
如何根据@var 的值过滤结果?
【问题讨论】:
-
SELECT id, @var := id * 2 FROM user WHERE id < 5? (抱歉,忍不住……) -
在
SELECT子句中声明的任何内容都只能在HAVING中引用。WHERE只能访问表数据。 -
@Pixelchemist 哈哈,谢谢。但是,我正在寻找一种过滤临时变量而不是表列的方法。在我们的实际查询中,@var 的取值是基于更复杂的逻辑,在
SELECT和WHERE子句中重复逻辑是多余的。 -
@Barmar 以下查询也不起作用:
SELECT `id`, @var := `id` * 2 FROM `user` HAVING @var < 10
标签: mysql variables where where-clause temporary