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

相关推荐
晨曦中的暮雨2 小时前
3.20字节云部门一面|面经
数据库·oracle
万邦科技Lafite3 小时前
实战演练:利用京东API一键抓取商品详情
数据库·redis·python·缓存·开放api·淘宝开放平台
LIUAWEIO3 小时前
接口 data 满屏反斜杠,怎么展开?
java·开发语言·数据库·json在线解析·data是字符串·json转义·二次json
沪漂阿龙3 小时前
面试题详解:大模型设计沙箱全攻略——LLM Sandbox、Agent 工具执行、代码沙箱、安全隔离、权限控制与工程落地
网络·数据库·人工智能·安全
IT策士3 小时前
Django 从 0 到 1 打造完整电商平台:Admin 后台管理与数据初始化
数据库·django·sqlite
Wait....4 小时前
死锁的知识总结
数据库·mysql
橙子圆1234 小时前
Redis知识7之主从复制
数据库·redis·缓存
IndulgeCui4 小时前
Kingbase基于UOS Server 20 三种详细安装部署方式
数据库
DianSan_ERP4 小时前
自研电商架构:一套API安全对接60+平台
大数据·运维·数据库·人工智能·安全·架构