1.6 在WHERE子句中引用取别名的列

Posted liang545621

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1.6 在WHERE子句中引用取别名的列相关的知识,希望对你有一定的参考价值。


如下查询,会抛出错误:

mysql> select sal as salary, comm as commission from emp where salary < 5000;
ERROR 1054 (42S22): Unknown column ‘salary‘ in ‘where clause‘


解决方案

将查询作为内联视图就可以就可以引用其中别名的列了:

select *
from (
select sal as salary, comm as commission
from emp ) x
where salary < 5000

在这个简单的示例中,可以不使用内联视图,也不用在WHERE子句中直接引用COMM或SAL而得到相同的结果。本方案介绍的方法在下列情形的WHERE子句都可以使用:

聚集函数
标量子查询
视窗函数
别名

将取别名的查询作为内联视图,便可以在外部查询中引用其别名列,为什么要这么做呢?WHERE子句是在SELECT子句之前进行处理的,在处理求解查询“问题”WHERE子句之前,SALARY和COMMISSION并不存在,要到WHERE子句处理完成之后,别名才有效。然而,FROM子句是在WHERE子句之前进行处理的。将原始查询放在FROM之句之中,那么,在最外层的WHERE子句之前,以及最外层的WHERE子句“看到”别名之前,就已经生成了查询结果。

 

以上是关于1.6 在WHERE子句中引用取别名的列的主要内容,如果未能解决你的问题,请参考以下文章

在 WHERE 子句 SQL 中使用别名 [重复]

如何在 SQL 的 where 子句中使用别名 [重复]

在 WHERE 子句中使用别名

在 WHERE 或 GROUP BY 子句中使用列表别名

如何在 WHERE 子句中使用条件不同的列?

如何在 where 子句中使用我的别名?