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 )

相关推荐
2401_896732136 小时前
MySQL小笔记
mysql
程序员清风7 小时前
数据处理脚本工程化:日志、配置、命令行与测试
服务器·开发语言·数据库
正在走向自律8 小时前
数据集成产品的技术底座:从日志解析原理到 KFS 同步链路搭建(含建表与增删改查完整代码)
数据库·oracle·信创·数据集成·国产数据库·kingbasees·全量+增量同步
程序员塔塔喵8 小时前
【MySQL篇|第七篇】MySQL事务
数据库·mysql·mysql事务
独隅9 小时前
Claude API 实战教程:从入门到完整项目
android·java·数据库·claude·claude code
_孤傲_9 小时前
快速掌握 MySQL 语法
数据库·后端·mysql
数字新视界11 小时前
一体化机柜在数据中心运维中的创新应用与优势分析
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
SelectDB11 小时前
从 StarRocks 走向 Apache Doris:如何实现引擎平滑替换与架构升级?
大数据·数据库·数据分析
为思念酝酿的痛11 小时前
MySQL的操作
数据库·mysql
猫咪很可爱12 小时前
Oracle ORA-4031 错误分析与处理:SGA 内存不足导致 update/exp/expdp 失败
数据库·oracle