KingbaseES数据库MySQL模式使用 “GROUP BY“

报错信息:

ERROR: column "xxxx" must appearin the GROUP BY clause or be used in an aggregate function

问题描述:

KES数据库group by 操作与mysql 结果不同。

分析与解决方法:

MySQL 的group by : MySQL支持select list中非聚集列可以不出现在group by中。sql标准是必须出现在group by中, 如:select col1, col2 from tab group by col1;

kingbase为兼容mysql,设置了个sql_mode参数,其默认包含ONLY_FULL_GROUP_BY选项。 如果sql_mode中不包含ONLY_FULL_GROUP_BY,group by语句可以不符合sql标准,也就是与mysql结果相同。

复制代码
test=# create table t1(id1 integer, id2 integer, val integer);
CREATE TABLE
test=# show sql_mode;
            sql_mode
--------------------------------
 ONLY_FULL_GROUP_BY,ANSI_QUOTES
(1 row)

test=# select id1, id2, count(*) from t1 group by id1;
ERROR:  column "t1.id2" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: select id1, id2, count(*) from t1 group by id1;
                    ^
test=# set sql_mode = '';
SET
test=# select id1, id2, count(*) from t1 group by id1;
 id1 | id2 | count
-----+-----+-------
(0 rows)

使用双引号做界定符

问题描述:

MySQL数据库模式使用双引号做界定符报语法错误。

分析与解决方法:

需要设置GUC参数sql_mode,使其包括ANSI_QUOTES,就可以兼容双引号。例如:

set sql_mode = ANSI_QUOTES;

不设置ANSI_QUOTES时,mysql可以使用双引号来引用字符串常量。而设置ANSI_QUOTES后, 双引号内的内容不再是字符串,而是mysql的标识符(如表名、字段名)。 这是mysql 值的 说明,定制版支持这个参数值就需要按规则使用 (V008R006C008B0020版本及以后支持 ANSI_QUOTES

相关推荐
野生技术架构师3 分钟前
Redis Hot Key 与 Big Key:危害、发现与解决方案
数据库·redis·缓存
杨云龙UP19 分钟前
DB2 HADR 主备架构活动日志参数优化操作手册
linux·运维·服务器·数据库·db2·db2 hadr·日志参数调整
我是大猴子24 分钟前
MyBatis‑Plus & MyBatis‑Flex 区别
java·服务器·数据库
鸽芷咕31 分钟前
SQL Server数据库迁移避坑指南:老代码不用重写,金仓KES V9R4C019把路铺平了
数据库
鸽芷咕34 分钟前
MongoDB 鸿蒙 PC 适配全记录:从 Bazel 交叉编译到 HNP 原生数据库服务
数据库·mongodb·harmonyos
YangYang9YangYan38 分钟前
2026 校招管理会计 JD 拆解,数据分析能力要求与工具清单
java·数据库·数据分析
敲代码的嘎仔1 小时前
互动问答系统实战:两级评论模型、ES 搜索集成、Caffeine 多级缓存全记录
java·开发语言·数据库·elasticsearch·缓存·mybatis·高并发
倔强的石头_1 小时前
SQL Server数据库迁移,为什么 KES V9R4C019 能把改代码变成改连接
数据库
黑色的白兔No11 小时前
deepin 25安装mysql
数据库·mysql·debian
cc5725026532 小时前
2026 秋招采购数据分析校招 JD、面试真题与项目准备|2027 届求职复盘
数据库