在where子句中引用别名列,查询报错:
select sal as salary, comm as commission
from emp
where salary <= 2000;
正确写法:
select *
from (select sal as salary, comm as commission from emp) x
where salary <= 2000;
将含有别名列的查询放入内嵌视图中,就可以在外层的查询中引用别名列。
原理是:针对例一失败的原因,是因为 where子句会比select子句先执行,当where子句执行的时候,别名 salary 和 commission 是不存在的。直到where子句执行完,别名才会生效。例二成功的原因是:from子句会先于where子句执行,所以把最初的查询放入一个from子句,其查询结果会在最外层的where子句开始前产生。这个时候,别名是有效的。