mysql不允许使用列的别名作为查询条件
例如:
select col+1 as a from table where a>100;
这样的sql在执行时会报错。
列表别名可以在 GROUP BY, ORDER BY, HAVING中被引用,而标准的SQL禁止在where中被引用,因为where语句执行在先。
所以可以用子查询的方式代替
mysql中sql语句执行顺序:
1. from
2. on
3. join
4. where
5. group by
6. with
7. having
8. select
9. distinct
10. order by
11. limit
一条SQL会经过这11步的,中间的每一步都会生成一张虚拟表,后面的步骤都是在上一张虚拟表中进行筛选与查询的
更详细可以参考:sql查询顺序
本文出自 亮有一技,转载时请注明出处及相应链接。