19 08 2024

在 MySQL 5.7 中,错误 1055 (#1055 - Expression #X of SELECT list is not in GROUP BY clause and contains nonaggregated column(s)) 通常发生在执行 GROUP BY 查询时,当 SELECT 子句中的某些列没有出现在 GROUP BY 子句中,并且这些列不是聚合函数的一部分时。

这主要是因为 MySQL 5.7 引入了一个新的 SQL 模式 ONLY_FULL_GROUP_BY,它默认启用,要求所有非聚合列都必须出现在 GROUP BY 子句中或被聚合函数处理。

解决方法:

1:修改 SQL 语句:

确保所有在 SELECT 子句中列出的非聚合列也出现在 GROUP BY 子句中。

使用聚合函数(如 COUNT(), SUM(), AVG() 等)来处理 SELECT 子句中的列。

2:临时禁用 ONLY_FULL_GROUP_BY(有试过,感觉不管用😆):

可以通过设置 SQL 模式来临时禁用 ONLY_FULL_GROUP_BY:

     SET sql_mode = (SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

3:永久禁用 ONLY_FULL_GROUP_BY(还是这个靠谱😋):

修改 MySQL 的配置文件 my.cnf 或 my.ini,具体取决于您的操作系统和安装方式。

找到 [mysqld] 部分,并修改或添加以下行:

     [mysqld]
     sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

重启 MySQL 服务器使更改生效

延伸阅读
    发表评论