当前位置:  开发笔记 > 后端 > 正文

你能在mysql的WHERE子句中使用别名吗?

如何解决《你能在mysql的WHERE子句中使用别名吗?》经验,为你挑选了2个好方法。



1> Paul Dixon..:

你可以使用HAVING子句 可以看到别名,例如

 HAVING avg_rating>5

但在where子句中你需要重复你的表达,例如

 WHERE (sum(reviews.rev_rating)/count(reviews.rev_id))>5

但!并非所有表达式都被允许 - 使用像SUM这样的聚合函数将不起作用,在这种情况下,您将需要使用HAVING子句.

来自MySQL手册:

不允许在WHERE子句中引用列别名,因为在执行WHERE子句时可能尚未确定列值.请参见第B.1.5.4节"列别名的问题".


进行了重写,使其更加清晰,不允许使用聚合功能
这是一个很好的答案,但请考虑性能影响,因为`HAVING`在获取数据后执行,之前执行`WHERE`.

2> Torbjörn Gyl..:

Dunno如果这在mysql中运行但是使用sqlserver你也可以像下面这样包装:

select * from (
  -- your original query
  select .. sum(reviews.rev_rating)/count(reviews.rev_id) as avg_rating 
  from ...) Foo
where Foo.avg_rating ...

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有