MySQL WHERE 子句和列别名:解决“#1054 - 未知列”错误
在 WHERE 子句中使用列别名时,MySQL 查询有时会产生错误“#1054 - 'IN/ALL/ANY subquery' 中的未知列 'guaranteed_postcode'”。这是因为标准 SQL 禁止在 WHERE 子句中使用别名,因为执行期间列值确定可能会出现不一致。 处理 WHERE 子句时,数据库尚未为别名赋值。
MySQL手册明确指出别名仅在GROUP BY、ORDER BY或HAVING子句中有效。 这些子句在数据检索之后运行,保证别名可用性。
您的查询可能在 WHERE 子句中使用 SUBSTRING(locations.raw,-6,4)
别名为 guaranteed_postcode
。 因为 MySQL 在计算列值之前遇到别名,所以会产生错误。
要纠正此问题,请使用 HAVING 子句(用于聚合函数或计算)或 WHERE 子句中的子查询。 子查询避免在主查询的 WHERE 子句中直接使用别名,提供必要的过滤而不违反 MySQL 的规则。
以上是为什么在 WHERE 子句中使用列别名时 MySQL 会抛出'#1054 - 未知列”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!