zoukankan      html  css  js  c++  java
  • ONLY_FULL_GROUP_BY 牛皮癣怎么治

    这个问题出现在MySQL5.7版本之上,问题核心解决就是修改配置内容,一个是修改文件,一个是通过sql来修改,去掉 ONLY_FULL_GROUP_BY

    网上太多的介绍,但是我试了一圈没一个成功,除了一个人,讲的还不错。https://blog.csdn.net/Abysscarry/article/details/79468411

    1。在mysql命令行输入:select @@sql_mode 查询当前数据库的默认sql_mode:

    ONLY_FULL_GROUP_BY

    对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中。
    简而言之,就是SELECT后面接的列必须被GROUP BY后面接的列所包含。如:

    select a,b from table group by a,b,c; (正确)
    select a,b,c from table group by a,b; (错误)
    这个配置会使得GROUP BY语句环境变得十分狭窄,所以一般都不加这个配置

    在MySQL命令行下,更改全局设置,对于新建的数据库有效:
    set @@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 Workbench)命令行下执行:
    set @@sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
    或者下面这句:(去掉NO_AUTO_CREATE_USER)
    set @@sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

    举例子,ONLY_FULL_GROUP_BY的影响:

    正常情况下没有配置

    select count(id) from table_demo order by rank -- ok
    select count(id) from table_demo group by rank -- ok
    select count(rank),id from table_demo group by rank -- ok
    select count(rank),id from table_demo group by id -- ok
    

    如果配置了ONLY_FULL_GROUP_BY

    select count(id) from table_demo order by rank -- error
    select count(id) from table_demo group by rank -- ok
    select count(rank),id from table_demo group by rank -- error
    select count(rank),id from table_demo group by id -- ok
    

    如果配置了ONLY_FULL_GROUP_BY,后面不能加order by
    如果使用了聚合函数,查询的字段还包括其他的字段,就需要使用group by,就跟oracle相似

  • 相关阅读:
    LeetCode Lect7 堆及其应用
    Leetcode Lect7 哈希表
    5105 pa3 Distributed File System based on Quorum Protocol
    5105 pa2 Distributed Hash Table based on Chord
    5105 pa1 MapReduce
    分布式系统知识总结
    OS知识点总结
    c++知识点总结3
    c知识点总结2
    c++知识点总结
  • 原文地址:https://www.cnblogs.com/treasury-manager/p/13958133.html
Copyright © 2011-2022 走看看