错误SqlExceptionHelper:146 - SELECT列表的表达式#7不在GROUP BY子句中并包含非聚合列

时间:2018-01-08 09:21:27

标签: mysql

我无法从服务器上的数据库中获取数据我使用的是ubantu 16.04和mysql Ver 14.14 Distrib 5.7.20, for Linux (x86_64) using EditLine wrapper。 它显示错误

2018-01-08 09:18:04 ERROR SqlExceptionHelper:146 - Expression #7 of SELECT
list is not in GROUP BY clause and contains nonaggregated column 
 db11.billpaidde6_.id' which is not functionally dependent on 
columns in GROUP BY clause; this is incompatible with 
 sql_mode=only_full_group_by

我已检查过在本地主机中工作的所有查询,但在服务器中显示错误如何解决此问题

1 个答案:

答案 0 :(得分:3)

您收到此错误是因为sql_mode设置为ONLY_FULL_GROUP_BY。此设置意味着当您选择未以任何方式聚合且查询中有GROUP BY的数据时,MySQL会出错。

这将在以下情形中生效:

table: users
id | name  | favourite_colour
----------------------------
1  | Fred  | blue
2  | John  | green
3  | David | blue

采取以下查询:

SELECT id, favourite_colour FROM users GROUP BY favourite_colour

如果你是MySQL,你会为id列返回什么?对于分组green的行,它是一个简单的选择,因为只有1个聚合。但是,对于颜色blue,有2行被聚合。实际上,MySQL会选择其中一个id来为您展示,但我认为它不可靠。

可能触发此错误的另一个查询是:

SELECT * FROM users GROUP BY favourite_colour

这仍然是选择未以任何方式聚合的列,但仍然会失败。

您可以通过省略查询中的任何非聚合列或聚合您可能关注的列来解决此错误。

SELECT favourite_colour FROM users GROUP BY favourite_colour
SELECT count(*), favourite_colour FROM users GROUP BY favourite_colour

或者,您可以禁用此SQL模式。

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

以上命令不会永久设置sql_mode全局。请在my.cnf中找到该行(或类似行)并删除ONLY_FULL_GROUP_BY

[mysqld] 
sql_mode = ONLY_FULL_GROUP_BY

如果您无法访问服务器,则需要与托管服务提供商联系,要求他们关闭ONLY_FULL_GROUP_BY