问题:当我们使用某个表达式作为输出的一列时,我们无法在Where条件中直接使用该列作判断条件.
例如下面的SQL语句:
select id, (c1 + c2) as s from t1 where s > 100
--SQL报错: "列名 s 无效"
当然,写成
select id, (c1 + c2) as s from t1 where (c1 + c2) > 100
就没问题了.
可是当表达式复杂时就很繁琐了.
有没有可以在Where中使用这样的列名的办法?
或者有什么其他办法可以解决这类问题呢?
解决方法:
select t2.*
from (select id, (c1 + c2) as c from t1) t2
where c > 100
--或者
select t2.*
from (select id, c = c1+c2 from t1) t2
where c > 100
由于在Where语句不能直接使用列别名,因此我们需要将Sql语句给包装一下。
在WHERE子句中引用列别名会出错,这是为什么呢?
因为:SELECT 语句的执行顺序
大家可以移步查看我另一篇文章,介绍mysql执行查询语句的流程
Mysql执行查询语句流程