首页 > 数据库 > mysql教程 > 如何解决 MySQL 错误:SELECT 列表与 SQL_MODE=ONLY_FULL_GROUP_BY 不兼容?

如何解决 MySQL 错误:SELECT 列表与 SQL_MODE=ONLY_FULL_GROUP_BY 不兼容?

Linda Hamilton
发布: 2024-12-30 21:54:11
原创
356 人浏览过

How to Resolve MySQL Error: SELECT List Incompatible with SQL_MODE=ONLY_FULL_GROUP_BY?

MySQL 错误:SELECT 列表与 SQL_MODE=ONLY_FULL_GROUP_BY 不兼容

执行包含 SELECT 语句且其中包含非聚合列的查询时分组子句时,MySQL 可能会返回错误,表明该表达式不在 GROUP BY 子句中。当 SQL_MODE 设置为 ONLY_FULL_GROUP_BY 时,可能会发生这种情况,这要求 SELECT 列表中的所有非聚合列都包含在 GROUP BY 子句中。

解决方案 1:禁用 SQL_MODE=ONLY_FULL_GROUP_BY

一种解决方案是禁用通过发出以下命令来设置 SQL_MODE=ONLY_FULL_GROUP_BY:

SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
登录后复制

这将允许查询执行而不会出现错误。

解决方案 2:在 GROUP 中包含所有非聚合列BY 子句

另一个解决方案是包含所有GROUP BY 子句中的非聚合列。这可以通过修改查询以包含以下内容来完成:

SELECT *
FROM `tbl_customer_pod_uploads`
WHERE `load_id` = '78' AND
      `status` = 'Active'
GROUP BY `proof_type`, `id`
登录后复制

这将确保所有非聚合列都包含在 GROUP BY 子句中,并且查询执行时不会出现错误。

解决方案 3:使用聚合器函数

为了获得最佳实践,请考虑使用用于非聚合列的聚合器函数,而不是选择所有列。例如,如果您只需要每种证明类型的记录数,则可以按如下方式修改查询:

SELECT `proof_type`, COUNT(*) AS `total_records`
FROM `tbl_customer_pod_uploads`
WHERE `load_id` = '78' AND
      `status` = 'Active'
GROUP BY `proof_type`
登录后复制

以上是如何解决 MySQL 错误:SELECT 列表与 SQL_MODE=ONLY_FULL_GROUP_BY 不兼容?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板