避免 MySQL ANY_VALUE 的 GROUP BY 错误
使用 MySQL 数据库时,经常会遇到与分组操作相关的错误,尤其是在版本中5.7 之前。其中一个问题是错误“SELECT 列表的表达式 #1 不在 GROUP BY 中”。当尝试在 GROUP BY 查询中检索非聚合列时,会发生此错误。
在 MySQL 5.7 中,ANY_VALUE 函数通过允许从非聚合列检索单个任意值,为该问题提供了便捷的解决方案。组内的聚合列。但是,此功能在早期版本的 MySQL 中不可用,例如 5.6。
一种解决方法是暂时禁用 ONLY_FULL_GROUP_BY SQL 模式,该模式对 GROUP BY 操作强制执行更严格的要求。这可以使用以下查询来完成:
SET SESSION sql_mode = '';
禁用 SQL 模式后,使用 ANY_VALUE 函数的查询将在 MySQL 5.6 中执行,不会出现错误。但是,需要注意的是,这种解决方法可能会导致不可预测的结果,因为它允许在查询结果中返回非聚合列。
更可靠的解决方案是修改 SQL 查询本身以显式聚合所需的列或从表中选择特定行。例如,如果示例查询中的图像表具有自动递增 id 列,则以下查询将为每个国家/地区返回一行,并显示可预测的图像:
SELECT c.id, c.name, i.* FROM countries c LEFT JOIN ( SELECT MIN(id) id, country_id FROM images GROUP BY country_id ) first ON c.id = first.country_id LEFT JOIN images i ON first.id = i.id
以上是如何避免 MySQL 中的'SELECT 列表的表达式 #1 不在 GROUP BY 中”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!