首页  >  文章  >  数据库  >  如何避免 MySQL 中的'SELECT 列表的表达式 #1 不在 GROUP BY 中”错误?

如何避免 MySQL 中的'SELECT 列表的表达式 #1 不在 GROUP BY 中”错误?

Patricia Arquette
Patricia Arquette原创
2024-11-27 18:51:11268浏览

How Can I Avoid

避免 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn