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