Caused by: java.sql.SQLSyntaxErrorException: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'xxx.workflowta0_.ID' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:121) ~[mysql-connector-j-8.0.33.jar:8.0.33]
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-j-8.0.33.jar:8.0.33]
at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:916) ~[mysql-connector-j-8.0.33.jar:8.0.33]
at com.mysql.cj.jdbc.ClientPreparedStatement.executeQuery(ClientPreparedStatement.java:972) ~[mysql-connector-j-8.0.33.jar:8.0.33]
月黑风高加班夜,调用一老哥提供的接口,花十分钟运行起来的项目,花了一秒钟就报错了,淦....
找到他的sql语句
<query name="QUERY_BY_PROCESSINSTANCEID_NODEID"><![CDATA[from com.workflow.entity.WorkflowTask where processInstance.id = :processInstanceId and nodeId = :nodeId GROUP BY parentId]]></query>
我心想从开始看 《mysql从入门到放弃》教的就是 GROUP BY 后接什么字段就只能查询什么字段,其余字段值需要套函数。什么意思:按照上边的例子来说就是查询字段中除了parentId,其余要查询的字段需要用max(),min(),count() 这种函数进行处理
GROUP BY 相当于是在满足条件的数据中,根据字段进行分组,假如有两条数据
姓名 | 性别 |
---|---|
小明 | 男 |
小强 | 男 |
select 姓名,性别 from xxx group by 性别 | |
按照性别男 分组后,姓名有两条,该展示哪条得明确一下,就需要套个函数 |
老哥说在他那不报错 问了老哥的mysql版本,查了下资料
从MySQL 5.7.5版本开始,默认的sql_mode
包含了ONLY_FULL_GROUP_BY
模式,要求GROUP BY
查询中的SELECT
列表、HAVING
条件或ORDER BY
列表中的列必须出现在GROUP BY
子句中或者是聚合函数的一部分
如果mysql版本大于等于 5.7.5,解决办法有
解决办法
方案1:按照要求规范sql语法 方案2:修改sql_mode的值
- SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''))
- 修改my.ini配置
[mysqld]
sql_mode=