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

相关推荐
TELL52116 分钟前
帮我生成对应的sql 以及数据库-deepseek提示词
数据库·sql
能年玲奈喝榴莲牛奶25 分钟前
系统规划与管理师-第一章-考点记忆
大数据·数据库·软考·系统规划与管理师·系规
SatanII36 分钟前
mariadb
数据库·mariadb
大千UI工场1 小时前
时序数据库对数字孪生的作用
数据库·ui·时序数据库·前端开发·b端管理系统
Tongzhi20261 小时前
通芝科技无感考勤一体机:软硬一体,开箱即用
数据结构·数据库·科技·算法·均值算法·数据库开发
这就是佬们吗2 小时前
向量数据库选型与实战:从原理到生产环境的完整指南
数据库
Shawn Dev2 小时前
MySQL Binlog 数据误删除恢复完全指南
数据库·mysql·elasticsearch
oradh2 小时前
Oracle ADRCI 诊断数据工具总结
数据库·oracle·adrci
zzzll11112 小时前
Loop Engineering:循环工程的原理、实践与应用
java·数据库·python
IpdataCloud3 小时前
IPv6查出来的地理位置是错的?技术解析与双栈定位方案
数据库·tcp/ip·ip