which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mod

问题描述

查询MySql表中的数据时遇到这样一个报错:

Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'axhyh-xs-local.apply.PATIENT_NAME' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

 报错如图:

问题原因及基本思路 

该问题的原因是 sql_mode不兼容,因此基本思路是修改本机所安装mysql的sql_mode,也就是把报错中 sql_mode=only_full_group_by去掉 only_full_group_by这种mode即可。

解决步骤

1. 找到自己Mysql的安装位置

如果你知道自己的Mysql安装位置那么直接到文件夹打开即可。

如果不知道,可通过下面方式查询:
在mysql查询软件中执行sql语句:select @@datadir;

如下图

 

2. 修改 my.ini 配置文件 

用记事本打开my.ini文件,在 [mysqld] 下面添加sql_mode的配置语句:

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
 

注意: 

这行sql_mode配置一定要在 [mysqld] 下方,而不是 [mysql] 或 [client]下方,否则无效!

这行配置的内容因人而异,上述只是我本机的配置。可能我的配置应用到你电脑上也可以解决问题,但也可能遇到无法重启mysql服务的情况。我就是复制了上述其他文章中的配置出现了该情况。
那么,如何获取适合自己电脑的sql_mode配置呢?你需要先查询自己的sql_mode,然后去除only_full_group_by即可。如下图:

 说明:图片中没有显示出ONLY_FULL_GROUP_BY是因为我已经在文件中去掉了。你们查出来正常是有的。

查询结果显示,修改之前我电脑的sql_mode是:(ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

因此,在此基础上去掉 ONLY_FULL_GROUP_BY
结果是:STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
这就是正确的sql_mode配置的由来!

 附上我完整的my.ini供你参考吧:

[client]
port=3306
default-character-set=utf8
[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的安装目录
basedir=F:\mysql5.7.19\mysql-5.7.19-winx64\
# 设置为MYSQL的数据目录
datadir=F:\mysql5.7.19\mysql-5.7.19-winx64\data\
port=3306
character_set_server=utf8
#跳过安全检查
#skip-grant-tables
log-bin=mysql-bin # 开启 binlog
binlog-format=ROW # 选择 ROW 模式
server_id=1 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复

#log=F:\mysql5.7.19\mysql.log

3. 重启MySql服务以生效配置 

验证问题解决 

  • 25
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值