• MySQL 5.7 执行SQL报错:1055


    背景

    项目中的MySQL服务器一直使用的公司内网测试服务器,前几天内网测试服务器出问题了,MySQL挂了不能提供服务,所以在本机安装了MySQL5.7.20版本(通过解压官网下载的压缩包并使用命令来安装的方式)。

    项目跑起来,有些功能使用不了,查了原因,是因为执行下面的SQL报异常了:

    SELECT
        rd.EQU_CD AS EQUCD,
        rd.EQU_TYPE AS EQUTYPE,
        DATE_FORMAT( rd.TM, '%Y-%m-%d' ) AS tm,
        sum( rd.ACCW ) ACCW 
    FROM
        t_receivedata rd
        INNER JOIN ( SELECT ENG_MAN_CD, EQU_CD, EQU_TYPE FROM t_monitor GROUP BY ENG_MAN_CD, EQU_CD ) mt ON rd.EQU_CD = mt.EQU_CD 
    WHERE
        mt.ENG_MAN_CD IS NOT NULL 
        AND mt.EQU_TYPE IS NOT NULL 
        AND YEAR ( rd.TM ) = 2019 
        AND MONTH ( rd.TM ) = 12 
    GROUP BY
        DATE_FORMAT( rd.TM, '%Y-%m-%d' ),
        rd.EQU_TYPE 
    ORDER BY
        TM ASC;

    异常信息如下:

    1055 - Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column

    原因

    MySQL 5.7.5 及以上功能依赖检测功能。如果启用了ONLY_FULL_GROUP_BY SQL 模式(默认情况下),MySQL将拒绝选择列表,HAVING 条件或 ORDER BY 列表的查询引用在 GROUP BY 子句中既未命名的非集合列,也不在功能上依赖于它们。(5.7.5之前,

    MySQL没有检测到功能依赖关系,默认情况下不启用ONLY_FULL_GROUP_BY。)

    解决

    以Windows操作系统为例,编辑 MySQL配置文件 my.ini,在尾部添加以下内容,重新启动 MySQL 即可:

    [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

    注意:如果你的my.ini文件中已经存在[mysqld]这行,就无需再添加了,只需要在[mysqld]下面添加sql_mode...这一行就行了。

    参考

    https://blog.csdn.net/yuanlaijike/article/details/87926596

  • 相关阅读:
    10000个线程更新同一行数据
    CountDownLatchTest
    创建 oracle dblin
    extjs日期控件使用
    JAVA Date超强工具类,可直接取代util.Date使用
    JSP&Servlet学习手册
    JAVA 文本 TXT 操作工具类
    Leetcode 526.优美的排列
    Leetcode 525.连续数组
    Leetcode 523.连续的子数组和
  • 原文地址:https://www.cnblogs.com/codecat/p/12095560.html
Copyright © 2020-2023  润新知