首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

带有Join的MYSQL GroupBy :与sql_mode=only_full_group_by不兼容

带有Join的MYSQL GroupBy与sql_mode=only_full_group_by不兼容是因为在MySQL中,使用Group By语句时,如果开启了sql_mode=only_full_group_by模式,那么在Select语句中的列必须要么出现在Group By子句中,要么作为聚合函数的参数。否则,MySQL会抛出错误。

当使用Join语句进行多表查询时,如果查询结果需要进行Group By操作,那么就会出现与sql_mode=only_full_group_by不兼容的情况。这是因为Join语句会将多个表的列进行合并,而在Group By操作中,需要明确指定每个列属于哪个表,以便正确进行分组。

解决这个问题的方法有两种:

  1. 明确指定每个列属于哪个表:在Select语句中,对于需要进行Group By的列,需要使用表名或表别名进行限定,以明确指定每个列属于哪个表。例如:
  2. 明确指定每个列属于哪个表:在Select语句中,对于需要进行Group By的列,需要使用表名或表别名进行限定,以明确指定每个列属于哪个表。例如:
  3. 使用聚合函数:如果某个列不需要作为Group By的依据,而是需要进行聚合操作,可以使用相应的聚合函数对该列进行处理。例如:
  4. 使用聚合函数:如果某个列不需要作为Group By的依据,而是需要进行聚合操作,可以使用相应的聚合函数对该列进行处理。例如:

推荐的腾讯云相关产品:腾讯云数据库MySQL

腾讯云数据库MySQL是一种高性能、可扩展的关系型数据库服务,提供了稳定可靠的云端数据库解决方案。它支持自动备份、容灾、监控等功能,能够满足各种规模和业务需求的数据库应用。

产品介绍链接地址:https://cloud.tencent.com/product/cdb

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

MySQL报错1055 - Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated colu

ONLY_FULL_GROUP_BY的设定,将不允许查询字段包括非聚集列 查询mysql服务器版本:以下命令在终端或者navicat中输入执行均可。...默认: STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION 方法一: 查询mysql 1055错误码发现问题为在mysql的配置中如果设置了sql_mode包含ONLY_FULL_GROUP_BY...关闭正在运行的mysql 2. 修改/etc/my.cnf,将sql_mode=中的only_full_group_by给删掉 3....sql_mode常用值: ONLY_FULL_GROUP_BY: 对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY...不设置此值时,用默认的存储引擎替代,并抛出一个异常   PIPES_AS_CONCAT: 将”||”视为字符串的连接操作符而非或运算符,这和Oracle数据库是一样的,也和字符串的拼接函数Concat相类似

49450
  • sql_mode兼容性,MySQL 8.0 升级踩过的坑

    sql_mode兼容性,MySQL 8.0 升级踩过的坑 前言: 1. MySQL升级8.0之后,业务访问数据库报错 2....因为,报错的这句sql_mode设置,与MySQL 5.7 版本的默认sql_mode设置一模一样。...2.3 检查并解决不兼容的sql_mode 实际上,在MySQL 8.0中废弃的sql_mode并不仅仅只有NO_AUTO_CREATE_USER,还有一些模式同样也是8.0不兼容的。...但是,以上种种方案只能保证MySQL升级前后的全局参数配置是OK的;客户端连接设置的会话级参数我们无法控制。这里就需要开发人员配合一起检查业务侧代码里有没有与MySQL 8.0不兼容的参数设置。...总结 那么,哪些参数/设置是MySQL 8.0与之前版本不兼容的呢? 我将在下一篇文章同大家分享这个问题。我会持续做一些相关记录和分享。

    6.1K11

    MySQL-this is incompatible with sql_mode=only_full_group_by错误解决方法

    一、原理层面        这个错误发生在mysql 5.7 版本及以上版本会出现的问题:        mysql 5.7版本默认的sql配置是:sql_mode="ONLY_FULL_GROUP_BY...很多从5.6升级到5.7时,为了语法兼容,大部分都会选择调整sql_mode,使其保持跟5.6一致,为了尽量兼容程序。...由于开启了ONLY_FULL_GROUP_BY的设置,所以如果一个字段没有在target list和group by字段中同时出现,或者是聚合函数的值的话,那么这条sql查询是被mysql认为非法的,会报错误...三、查看sql_mode的语句如下 select @@GLOBAL.sql_mode; 四、解决方案 1.永久修改,需修改mysql配置文件,通过手动添加sql_mode的方式强制指定不需要ONLY_FULL_GROUP_BY...2.临时性修改sql_mode,但是重启mysql数据库服务之后,ONLY_FULL_GROUP_BY还会出现。

    9.1K30

    In aggregated query without GROUP BY...this is incompatible with sql_mode=only_full_group_by

    设置不当引起的,修改下sql_mode即可: 查询: select version(), @@sql_mode; 1.方式一 修改 SET sql_mode=(SELECT REPLACE(@@sql_mode...,'ONLY_FULL_GROUP_BY','')); 再查询: 这种修改,不持久化,重启数据库后会再次出现此问题,所以,我们需要将此设置持久化到配置文件中。...首先找到mysql的配置文件,不同安装方式,配置文件位置或者名字不一样,我这里是my.cnf,未修改前内容如下: [root@localhost etc]# cat my.cnf # For advice...=0 log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid 在配置文件中添加指定的sql_mode: sql_mode=STRICT_TRANS_TABLES.../systemctl restart mysqld.service 此时sql_mode的设置就持久化到mysql了,重启也不会出问题了。 查询文件位置:find .

    1.1K20

    技术分享 | 深入理解 MySQL 中的 SQL_MODE

    SQL_MODE 在迁移前的调整 在将 MySQL 数据库迁移到其他数据库之前,可以考虑以下步骤来调整 SQL_MODE,以减少迁移时可能出现的兼容性问题: 禁用严格模式:在迁移前,禁用 MySQL 中的严格模式...通过禁用严格模式,可以提前发现并处理不兼容的数据。...SET GLOBAL SQL_MODE =''; 禁用 ONLY_FULL_GROUP_BY:MySQL 的 ONLY_FULL_GROUP_BY 模式要求所有非聚合列必须在 GROUP BY 子句中...空字符串与 NULL 的处理:在 MySQL 中,空字符串和 NULL 可能在一些情况下被视为相等,而在其他数据库中并非如此。迁移前,应该明确这些字段的逻辑,并在必要时进行转换。...小结 在从 MySQL 迁移到其他数据库时,合理调整 SQL_MODE 可以显著减少迁移过程中的兼容性问题。

    17810

    报错sql_mode=only_full_group_by

    =only_full_group_by 如何解决 「调整GROUP BY子句和SELECT列表:」 保证查询的字段在group by中即可 「禁用only_full_group_by模式:」 如果你确定查询的逻辑和数据不会引起问题...,可以在查询之前执行以下命令来临时禁用only_full_group_by模式: SET SESSION sql_mode=''; 这可能会导致一些数据不一致性问题,只有在你非常确定情况下才应该使用。...如果是需要永久写入,那就需要写到cnf或ini配置中 mysql中配置文件地址一般是C:\Program Files\MySQL\MySQL Server 5.7\bin\my.ini 我的在这里额...查询已经有的sql_mode select @@sql_mode 在ini中添加查询出来的模式配置,然后去掉only_full_group_by模式即可 [mysqld] sql_mode=STRICT_TRANS_TABLES...这可能涉及到使用子查询、临时表或其他方式来满足only_full_group_by模式的要求。 。 本文由 mdnice 多平台发布

    26730

    MySQL5.7 中使用 group by 报错 this is incompatible with sql_mode=only_full_group_by

    问题分析 ---- 一、原理层面 这个错误发生在mysql 5.7 版本及以上版本,5.7版本默认的sql_mode配置中包含 ONLY_FULL_GROUP_BY,这个配置严格执行了”SQL92标准”...很多人从5.6升级到5.7时,为了语法兼容,大部分都会选择调整sql_mode,使其保持跟5.6一致,为了尽量兼容程序 二、sql层面: sql执行时,出现该原因: 简单来说就是:输出的结果是叫 target...由于开启了ONLY_FULL_GROUP_BY的设置,所以如果一个字段没有在target list 和 group by 字段中同时出现,或者是聚合函数的值的话,那么这条sql查询是被mysql认为非法的...查看sql模式 ---- 查看 sql_mode 的语句 show global variables like 'sql_mode'; 通过命令行可以看到 sql_mode 的值有一堆,将最前面的 ONLY_FULL_GROUP_BY...解决方案(去除 ONLY_FULL_GROUP_BY) ---- 方案一: 临时性解决 (执行SQL语句) 此方式重启MySQl服务后失效 set @@GLOBAL.sql_mode="STRICT_TRANS_TABLES

    2K51

    升级MySQL5.7,开发不得不注意的坑

    前段时间,将线上MySQL数据库升级到了5.7。考虑到可能产生的不兼容性,在升级之前,确实也是战战兢兢,虽然测试环境,开发环境早在半年前就已提前升级。...基于前期的调研和朋友的反馈,与开发相关的主要有两点: sql_mode MySQL 5.6中,其默认值为"NO_ENGINE_SU BSTITUTION",可理解为非严格模式,譬如,对自增主键插入空字符串...=only_full_group_by 这个与sql_mode有关,在MySQL 5.7中,sql_mode调整为了 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE...这里,对之前提到的,MySQL 5.7中不再兼容的实现方式也做了个测试,在没有任何索引的情况下,其稳定在0.7s(性能并不弱,怪不得有人使用),而同等情况下,方法1稳定在0.5s(哈,MySQL 5.6...PS: 经大神指点,对之前提到的,MySQL 5.7中不再兼容的实现方式,实际可以通过调整optimizer_switch来加以规避 set optimizer_switch='derived_merge

    63210

    mysql5.7 group by语法 1055

    先来看如下语句,查询默认存在的引擎表 ?  之前使用的MySQL版本为5.7以下,根据support进行分组执行语句如下 ? 添加跟分组support无关的字段engine ?...information_schema.ENGINES.ENGINE' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode...=only_full_group_by 意思是 SELECT list不在GROUP BY子句中,并且包含非聚合列'information_schema. engine。...在功能上不依赖于GROUP BY子句中的列;这与sql_mode=only_full_group_by不兼容 也就是select展示的列必须跟group by相关 这就跟oracle的group by语法一致了...,NO_ENGINE_SUBSTITUTION 修改方式,window编辑my.ini,Linux编辑my.cnf,将[mysqld]中的sql_mode的值删除ONLY_FULL_GROUP_BY,重启解决

    1.3K20

    小白学习MySQL - only_full_group_by的校验规则

    这里要提到的一个参数就是sql_mode,他存储的是MySQL应该支持的SQL语法,对数据的校验等,一些常见的值,如下所示, (1) ONLY_FULL_GROUP_BY 对于GROUP BY聚合操作,...在MySQL 5.7以上,sql_mode参数值是默认包含这个only_full_group_by校验规则的,但是在5.7以下,不包含此规则,如上的SQL,就是跑在5.5, show variables...,group by中未包含非聚合列是c1,而且明确提示,他和sql_mode=only_full_group_by不兼容, select c1, c2 from test group by c2; SQL...=only_full_group_by 我们删除sql_mode的only_full_group_by, set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE...SQL很可能得到的就是错误的结果集,从MySQL 5.7开始就默认支持校验规则only_full_group_by能看出,MySQL提高了校验强度,毕竟更严格的校验规则,才可能避免这些非常容易出现的错误

    43230

    【黄啊码】MySQL:Syntax error or access violation: 1055 Expression #1 of SELECT list is not ...

    如果启用了only_full_group_by SQL模式(在默认情况下是这样),那么MySQL就会拒绝选择列表、条件或顺序列表引用的查询,这些查询将引用组中未命名的非聚合列,而不是在功能上依赖于它们。...(在5.7.5之前,MySQL没有检测到功能依赖项,only_full_group_by在默认情况下是不启用的。关于前5.7.5行为的描述,请参阅MySQL 5.6参考手册。)...执行以下个命令,可以查看 sql_mode 的内容。   ...session和global 的sql_mode的值都为: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO...的 ONLY_FULL_GROUP_BY 但很多网友说直接修改mysql配置文件,在my.ini加上sql_mode=即可 [mysqld] sql_mode= 黄啊码也亲自尝试过,确实可以!

    53630

    mysql5.7在使用group by的注意事项

    mysql5.7在使用group by的注意事项 1、问题描述 2、解决方案(一): 3、解决方案(二) 4、解决方案(三) 1、云数据库修改方案: 2、本地数据库修改方案: 1、问题描述 先看一个sql...语句报错: select * from oilDaily group by wellId 这是因为在mysql5.7中开启了sql_mode中的“only_full_group_by”,而这个在执行以往版本中带有...4、解决方案(三) 我们直接删除sql_mode中的only_full_group_by 我用的mysql云数据库,修改方式如下: 1、云数据库修改方案: 点击管理 点击参数设置...找到sql_mode选项 去掉ONLY_FULL_GROUP_BY的勾选。...ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' 你设置上面的值最好用select @@global.sqlmode查一下,再将ONLY_FULL_GROUP_BY

    67020

    mysql sql-mode 解析和设置

    sql_mode:简而言之就是:它定义了你MySQL应该支持的sql语法,对数据的校验等等 select @@sql_mode:使用该命令我们可以查看我们当前数据库的sql_mode mysql> select...group by 的话就必须删除掉only_full_group_by set sql_mode=(select replace(@@sql_mode,'ONLY_FULL_GROUP_BY',''))...; 可以使用该语句来将空格替换掉only_full_group_by,这样我们就可以使用 mysql> SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY...不设置此值时,用默认的存储引擎替代,并抛出一个异常 三、据说是MySQL5.0以上版本支持三种sql_mode模式:ANSI、TRADITIONAL和STRICT_TRANS_TABLES。 ...将当前数据库模式设置为STRICT_TRANS_TABLES模式: mysql> set @@sql_mode=STRICT_TRANS_TABLES;   没有最好与最坏的模式,只有最合适的模式。

    1.6K20

    mysql 版本bug

    mysql命令gruop by报错this is incompatible with sql_mode=only_full_group_by 在mysql 工具 搜索或者插入数据时报下面错误: ERROR...=only_full_group_by 原因: 看一下group by的语法: select 选取分组中的列+聚合函数 from 表名称 group by 分组的列  从语法格式来看,是先有分组,再确定检索的列...我当前Mysql版本5.7.17, 再看一下ONLY_FULL_GROUP_BY的意思是:对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,...,NO_ENGINE_SUBSTITUTION 第一项默认开启ONLY_FULL_GROUP_BY, 解决方法: 1.只选择出现在group by后面的列,或者给列增加聚合函数;(不推荐) 2.命令行输入...但是如果你重启Mysql服务的话,发现ONLY_FULL_GROUP_BY还是会存在的 想要彻底解决这个问题 就得去改my.ini 配置(如果你们mysql 没有这个文件,就把my-default.ini

    1.4K20

    MySQL SQL模式特点汇总

    前言 MySQL服务器可以在不同的SQL模式下运行,并且可以针对不同的客户端以不同的方式应用这些模式,具体取决于sql_mode系统变量的值。...DBA可以设置全局SQL模式以匹配站点服务器操作要求,并且每个应用程序可以将其会话SQL模式设置为其自己的要求。 模式会影响MySQL支持的SQL语法以及它执行的数据验证检查。...如果结果否则为负,则会导致错误 NO_ZERO_IN_DATE ‘0000-00-00’ 则允许并且插入产生警告 ONLY_FULL_GROUP_BY select 内指定字段必须出现在 groupby...SQL模式下运行,并且可以针对不同的客户端以不同的方式应用这些模式,具体取决于sql_mode系统变量的值。...如果要插入的新行不包含其定义中NOT NULL没有显式DEFAULT子句的列的值,则缺少值。

    99720
    领券