在使用MySQL时,我们经常会用到取别名(AS)来简化表达式,但是在使用了别名之后,有时却不能再对其进行SELECT操作,这是为什么呢?
SELECT COUNT(*) AS num FROM table1;SELECT num FROM table1; -- 这里会报错:Unknown column 'num' in 'field list'
以上代码中,我们使用AS给COUNT(*)起了一个别名num,在第二行代码中,我们尝试用num作为列名再次SELECT,却出现了Unknown column 'num' in 'field list'的错误。
原因是,MySQL执行SELECT语句的顺序是先执行FROM子句中指定的表,然后根据WHERE子句过滤,最后才进行SELECT操作。在结果集生成后,才会根据查询结果的列名进行别名替换,因此在SELECT子句中使用别名会出现“未知列”的错误。
解决方法是使用子查询,在查询结果集生成之前先对别名进行替换。
SELECT num FROM (SELECT COUNT(*) AS num FROM table1) as temp;
以上代码中,我们先将COUNT(*)的结果作为子查询,再将其替换为别名num,这样就可以顺利地SELECT了。