第一篇:SQL语句Where中使用别名作为判断条件-2014年3月10日1时5分
当我们使用某个表达式作为输出的一列时,我们无法再Where条件中直接使用该列作判断条件.例如下面的SQL语句:
select id,(c1 + c2)as s from t1where s > 100
SQL Server 报错: “列名 s 无效”
当然,写成select id,(c1 + c2)as s from t1where(c1 + c2)> 100
就没问题了.可是当表达式复杂时就很繁琐了.有没有可以在Where中使用这样的列名的办法?
或者有什么其他办法可以解决这类问题呢?
解决方法:
SQL code复制代码
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语句给包装一下
在ORACLE中,在WHERE子句中引用列别名会出错,这是为什么呢?
因为:SELECT 语句的执行顺序
1.from语句
2.where语句(结合条件)
3.start with语句
4.connect by语句
5.where语句
6.group by语句
7.having语句
8.model语句
9.select语句
10.union、minus、intersect等集合演算演算
11.order by语句