2
为什么MySQL允许HAVING使用SELECT别名?
据我所知,在SQL中,逻辑查询处理顺序(即概念解释顺序)以以下方式从FROM开始: 从 哪里 通过...分组 拥有 选择 订购 在此列表之后,很容易看出为什么在WHERE子句中没有SELECT别名,因为尚未创建别名。T-SQL(SQL Server)严格遵循此原则,在传递SELECT之前,您不能使用SELECT别名。 但是在MySQL中,即使应该(在逻辑上)在SELECT子句之前对其进行处理,也可以在HAVING子句中使用SELECT别名。这怎么可能? 举个例子: SELECT YEAR(orderdate), COUNT(*) as Amount FROM Sales.Orders GROUP BY YEAR(orderdate) HAVING Amount>1; 该语句在T-SQL中无效(因为HAVING引用了SELECT别名Amount)... Msg 207, Level 16, State 1, Line 5 Invalid column name 'Amount'. ...但是在MySQL中工作正常。 基于此,我想知道: MySQL是否在SQL规则中采取捷径来帮助用户?也许使用某种预分析? 还是MySQL使用的概念解释顺序与我遵循的所有RDBMS遵循的顺序不同?