我无法从服务器上的数据库中获取数据我使用的是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
我已检查过在本地主机中工作的所有查询,但在服务器中显示错误如何解决此问题
答案 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
。