MySQL WHERE 子句:别名限制
MySQL 允许对列使用别名以提高可读性并在查询中创建新表达式。 但是,直接在 WHERE
子句中使用别名通常会导致“未知列”错误。这是因为 WHERE
子句在分配 别名之前过滤 行。
解决方法:
一种解决方案涉及使用 HAVING
子句。 与 WHERE
不同,HAVING
在 分组和聚合之后操作 ,允许引用在查询中创建的别名:
<code class="language-sql">SELECT *, AVG(rev_rating) AS avg_rating FROM reviews GROUP BY rev_id HAVING avg_rating > 5;</code>
这里,avg_rating
在 HAVING
中被正确引用。
要在 WHERE
子句中实现类似的过滤,必须将别名替换为其完整表达式:
<code class="language-sql">SELECT * FROM reviews WHERE (SUM(reviews.rev_rating) / COUNT(reviews.rev_id)) > 5;</code>
重要注意事项:
WHERE
子句不支持所有表达式,特别是别名中使用的 SUM()
或 AVG()
等聚合函数。 在这种情况下,HAVING
是必不可少的。
正如 MySQL 文档所解释的,不允许在 WHERE
中引用列别名,因为在 WHERE
子句执行时可能无法计算它们的值。
以上是我可以在 MySQL 的 WHERE 子句中使用别名吗?的详细内容。更多信息请关注PHP中文网其他相关文章!