Mysql 中,为什么 WHERE 使用别名会报错,而 ORDER BY 不会报错?
Mysql 中,为什么 WHERE 使用别名会报错,而 ORDER BY 不会报错?
我们先对salary * 12 命名一个别名annual_sal
SELECT employee_id,salary,salary * 12 annual_sal FROM employees ORDER BY annual_sal;
这段代码以annual_sal升序输出且正常执行没有报错。说明order by 可以使用别名
我们再看看这个段代码
SELECT employee_id,salary,salary * 12 annual_sal FROM employees WHERE annual_sal > 81600 ORDER BY annual_sal;
这段代码就报错了,报错说明是Unknown column 'annual_sal' in 'where clause'。由此可以得出where语句执行是找不到annual_sal.
要解决这个问题,我们必须知道sql语句执行顺序。
- 先执行from语句用哪个表
- where过滤条件(这时候不知道别名)
- select选择输出字段 (这时候才有别名)
- order by进行排序 (order by 才能使用别名)
总结一下:因为where在sql中执行顺序在select(创建别名)之前,所以找不到别名。
作者: cobraLP
出处:https://www.cnblogs.com/cobral/p/17320854.html
本站使用「CC BY 4.0」创作共享协议,转载请在文章明显位置注明作者及出处。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~