达梦的条件查询where后面的字段必须是表里存在的字段吗,同样的sql,pg里面执行不报错,达梦里面提示【无效的列名】20


钻石粗暴
钻石粗暴 2024-04-07 15:41:45 49154
分类专栏:问题 问题分类: 其它未定义问题
已结题
1 个回答
  • 1843880570 进阶 2024-04-07 16:31:50

     复现报错
    --咋们可以利用达梦数据库内置的员工表测试
    select e.department_id,e.employee_name,sum(e.salary) from dmhr.employee e group by e.department_id;

    ---------报错信息---------------
    总共1个语句正依次执行...

    [执行语句1]:
    select e.department_id,e.employee_name,sum(e.salary) from dmhr.employee e group by e.department_id;
    执行失败(语句1)
    -4080: 第1 行附近出现错误:
    不是 GROUP BY 表达式

    1条语句执行失败
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    3.2 解决办法1:
    ##达梦支持灵活的处理方式,可以直接在查询中加hint参数。
    select /*+ GROUP_OPT_FLAG(1)*/ e.department_id,e.employee_name,sum(e.salary) from dmhr.employee e group by e.department_id;

    101    马学铭    72424
    102    程擎武    21592
    103    郑吉群    129443
    104    陈仙    75945
    105    金纬    194399
    201    李慧军    45299
    202    常鹏程    20491
    204    谢俊人    81014
    301    苏国华    112344
    ..............
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13


    3.3 解决办法2:
    ##也可以修改dm.ini参数GROUP_OPT_FLAG=1,动态,会话级参数,不用重启数据库。
    select para_name,para_value,file_value from v$dm_ini where para_name='GROUP_OPT_FLAG';
    ##sp_set_para_value(1,'GROUP_OPT_FLAG',1);
    select e.department_id,e.employee_name,sum(e.salary) from dmhr.employee e group by e.department_id;

    101    马学铭    72424
    102    程擎武    21592
    103    郑吉群    129443
    104    陈仙    75945
    105    金纬    194399
    201    李慧军    45299
    202    常鹏程    20491
    204    谢俊人    81014
    301    苏国华    112344
    ...............
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15


    3.4 解决办法3:
    达梦还可以配置兼容参数,COMPATIBLE_MODE=4,静态参数,需要重启数据库后生效!
    sp_set_para_value(2,'COMPATIBLE_MODE',4);
    select para_name,para_value,file_value from v$dm_ini where para_name='COMPATIBLE_MODE';

    !!注意修改后需要重启数据库!!

    select e.department_id,e.employee_name,sum(e.salary) from dmhr.employee e group by e.department_id;

    101    马学铭    72424
    102    程擎武    21592
    103    郑吉群    129443
    104    陈仙    75945
    105    金纬    194399
    201    李慧军    45299
    202    常鹏程    20491
    204    谢俊人    81014
    301    苏国华    112344
    ...............

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18


    COMPATIBLE_MODE参数解释:
     0: 不兼容
     1:兼容 SQL92 标准
     2: 部分兼容 ORACLE
     3: 部分兼容 MS SQL SERVER 
    4: 部分兼容 MYSQL
    5:兼容 DM6
    6: 部分兼容 TERADATA
    1
    2
    3
    4
    5
    6
    7
    8
    4、GROUP BY注意事项
    使用 GROUP BY 要注意以下问题:
    1.在 GROUP BY 子句中的每一列必须明确地命名属于在 FROM 子句中命名的表的一列。分组列的数据类型不能是多媒体数据类型;
    2.分组列不能为集函数表达式或者在 SELECT 子句中定义的别名;
    3.当分组列值包含空值时,则空值作为一个独立组;
    4.当分组列包含多个列名时,则按照 GROUP BY 子句中列出现的顺序进行分组;
    5. GROUP BY 子句中至多可包含 255 个分组列; 6. ROLLUP\CUBE\GROUPING SETS 组合不能超过 9 个。

    赞同 0 反对 0

钻石粗暴新手
粉丝 0 发表 12 + 关注 私信
上周热门
统信系统能生成某一指定文件夹下的所有文件列表吗  2772
统信系统有自己的字幕屏幕保护程序吗  2532
统信软件能支持pandas吗  2454
统信系统如何在保证自己数据安全的基础上,进行数据分析,比如使用pandas进行大数据分析  2443
安全与发展,统信系统是如何在两者之间权衡,满足用户高效办公的要求  2103
统信系统的数据安全机制是什么  1770
统信软件支持python为什么不支持安装pandas  1113
您好,我想问一下,就是这银河麒麟系统,背景黑屏怎么办啊,其他的都正常,就是没有背景,设置里面的背景一点击系统就不响应了怎么解决?  174
我想连接共享打印机可是,搜索驱动时候没有,怎么办  160
uos有支持活体检测的软件吗  149
本周热议
麒麟系统登录输入密码后又需要重新输入密码,确定密码正确。如何处理? 12
求麒麟系统下的Broadcom 802.11n 无线网卡驱动 10
银河麒麟桌面操作系统V10 SP1安装应用时会反复提示安全授权认证,如何才能取消呢? 10
统信UOS系统下安装HP打印机驱动问题 10
银河麒麟系统登录时用户名是中文,如何将输入法切换成中文进行登录? 9
如何在统信系统使用VFP? 9
使用正版软件承诺书每年一签有相关的政策文件吗? 8
银河麒麟系统安装软件需要密码授权,单用户模式修改密码不行,如何解决 8
uos系统怎么装了向日葵,向日葵打不开啊? 7
有偿使用中国长城信创运维工程师(初级)证书 7

加入交流群

请使用微信扫一扫!