Error Code: 1055. Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'table.key' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
以上是报错信息,根据这个报错信息 在网海里捞了一捞,发现大部分的结果都是类似这样的
set @@global.sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
然而设置了却没有起作用.
正确的设置方法 如下:
set @@session.sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
当然sql_mode 的值 最好根据
select @@global.sql_mode 得到的结果 做修改.把得到的值 中的ONLY_FULL_GROUP_BY去掉
还有另外一个解决办法 就是通过 any_value()这个内置函数
SELECT name, ANY_VALUE(address), MAX(age) FROM t GROUP BY name;
在这种情况下,MySQL 会忽略address每个name组中值 的不确定性 并接受查询。如果您根本不关心为每个组选择非聚合列的哪个值,这可能很有用。 ANY_VALUE()不是聚合函数,与SUM()或 等函数不同 COUNT()。它只是起到抑制非确定性测试的作用。
文档中给出了抛出这个错误的3种解决办法分别是:
1.更改表以创建name主键或唯一NOT NULL列
2.使用any_value
3.禁用 ONLY_FULL_GROUP_BY
参考:https://dev.mysql.com/doc/refman/8.0/en/miscellaneous-functions.html#function_any-value
评论 (0)