与sql_mode不匹配' only_full_group_by'但它没有设定

时间:2017-01-25 16:07:18

标签: mysql sql

我正在尝试运行查询但是我收到以下错误:

  

SQL错误(1055):SELECT列表的表达式#14不在GROUP BY子句中,并且包含非聚合列' gamesmart.gps.plays'它在功能上不依赖于GROUP BY子句中的列;这与sql_mode = only_full_group_by

不兼容

当我检查sql_mode时,sessionglobal的设置如下:

sql_mode

那么,为什么它仍然给我这个错误?

Mysql版本:5.7.14

3 个答案:

答案 0 :(得分:2)

尝试解决由5.7要求引起的查询:

  • 通过设置sql_mode来禁用'only_full_group_by'。不    推荐!
  • 通过设置适当的方式重写您的查询  列表中的列名称
  • 在其中设置ANY_VALUE(fieldname) 你的SELECT查询,如果你真的知道这是你所期望的。

答案 1 :(得分:0)

以下是我发现的两个选项(我可以做其中一个):

  • 在select子句中将所有聚合函数从此ifnull(gps.plays,0)转换为此ifnull(gps.plays,0) as plays
  • .ini文件中设置以下内容:
[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

答案 2 :(得分:0)

在您的终端中:

mysql -u yourusername -p

然后输入您的密码。它将带您进入MySQL监视器。

撰写此查询:

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';

之后,转到etc / mysql / my.cnf,打开文件,然后将代码粘贴到该行下面。

[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

它对我有用。