zoukankan      html  css  js  c++  java
  • 解决ONLY_FULL_GROUP_BY的问题

    报错 在mysql 5.7版本下可能会报如下错误

    Error Code: 1055. Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘×××’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

    原因 是在5.7下mysql的model默认为

    ONLY_FULL_GROUP_BY

    含义 sql中select后面的字段必须出现在group by后面,或者被聚合函数包裹,不然会抛出上面的错误 如以下sql

    select A.column1, A.column2 from table as A group by column1 //会因为ONLY_FULL_GROUP_BY的缘故抛出上面错误
    1
    问题解决
    思路一
    既然是这个模式限制的问题 我们可以修改该模式,找到配置文件 修改配置即可。

    vim /etc/mysql/my.cnf
    1
    文件名如上所示,但是地址可能得看具体环境了

    [mysql]
    #设置mysql客户端默认字符集
    default-character-set=utf8 
    [mysqld]
    #设置3306端口
    port = 3306
    #设置mysql的安装目录
    basedir=%MYSQL_HOME%
    #允许最大连接数
    max_connections=200
    #服务端使用的字符集默认为8比特编码的latin1字符集
    character-set-server=utf8
    #创建新表时将使用的默认存储引擎
    default-storage-engine=INNODB
    #设置模式
    sql_mode =STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
    
    datadir = D:mysql-5.7.27-winx64data
    

    注意这里的sql_mode 是配置在[mysqld]下面的
    然后就是重启mysql服务

    思路二
    我们得承认这个模式是很有意义的。而我们又想实现如下sql的效果

    select A.column1, A.column2 from table as A group by column1

    首先我们得理解我们写的上面的sql的含义 按column1进行分组 那么结果就是这个组内的cloumn1都是相同的,但是column2却没有限制,也就是说可能相同 也可能不同,那么数据库不知道column2该返回什么值给你

    那么我们有两种方案

    在group by后面追加上column2就可以了,意义相当于按照 由column1和column2拼接成的联合字段进行分组
    select A.column1, A.column2 from table as A group by column1 , column2
    1
    或者在内查询里只查询分组的字段, 各位可以参考如下形式
    SELECT A.column1, A.column2 FROM TABLE A JOIN ( SELECT max(id) id, column1 FROM TABLE b GROUP BY column_1 )

    不会,我可以学;落后,我可以追赶;跌倒,我可以站起来!
  • 相关阅读:
    uva------(11464)Even Parity
    java SE学习之线程同步(详细介绍)
    MFC学习之窗口基础
    java多线程的常用方法(以及注意事项)
    java多线程下如何调用一个共同的内存单元(调用同一个对象)
    java之多线程(Thread)
    HDUOJ------3336 Count the string(kmp)
    hduoj------2594 Simpsons’ Hidden Talents
    POJ--2158--------------Milking Grid(最小覆盖字符矩阵)---(开二维kmp)
    poj-------------(2752)Seek the Name, Seek the Fame(kmp)
  • 原文地址:https://www.cnblogs.com/xiaoshahai/p/14893417.html
Copyright © 2011-2022 走看看