zhanggame1
(Ti D Ber G I13ecx U)
2023 年10 月 18 日 10:38
1
【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】7.1
【遇到的问题:问题现象及影响】
参考
SQL 模式 | PingCAP 文档中心
通过 select @@sql_mode可以查到
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
文档说
ONLY_FULL_GROUP_BY 如果 GROUP BY 出现的列并没有在 SELECT,HAVING,ORDER BY 中出现,此 SQL 不合法,因为不在 GROUP BY 中的列被查询展示出来不符合正常现象(支持)
测试了几种,发现都是正常返回的,如:
select loc_name,MAX(loc_type) from loc l group by l.loc_id;
select l.loc_id,loc_name,MAX(loc_type) from loc l group by l.loc_id;
请问不合法的是哪种?
有猫万事足
2023 年10 月 18 日 13:15
2
是不是改了变量以后需要重新连接一下才会生效?
和你下面类似的sql,我执行后报错。
1055 - Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'battleLog.battlelog.datetime' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
zhanggame1:
ONLY_FULL_GROUP_BY
这个参数是可以开启和关闭的吧?
SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;
你查询的应该是默认开启的呀,应该是GLOBAL级的。再查查SESSION?
Jolyne
2023 年10 月 19 日 02:14
10
在生产中也遇到过,如果group by没有出现对应的列会报错的,会提示sql_mode=only_full_group_by的错误
你那什么版本?
我这 5.7.25-TiDB-v7.1.1
tidb菜鸟一只
(小菜一颗)
2023 年10 月 19 日 03:42
17
你这个表不会是刚好loc_id和loc_name一一对应吧?你换个字段group by。