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


钻石粗暴
钻石粗暴 2024-04-07 15:41:45 49152
分类专栏: 问题

网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。

本文链接:https://www.xckfsq.com/news/show.html?id=53042
赞同 0
评论 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
    回复

钻石粗暴L1
粉丝 0 发表 12 + 关注 私信
上周热门
如何使用 StarRocks 管理和优化数据湖中的数据?  2966
【软件正版化】软件正版化工作要点  2885
统信UOS试玩黑神话:悟空  2856
信刻光盘安全隔离与信息交换系统  2743
镜舟科技与中启乘数科技达成战略合作,共筑数据服务新生态  1277
grub引导程序无法找到指定设备和分区  1244
华为全联接大会2024丨软通动力分论坛精彩议程抢先看!  169
2024海洋能源产业融合发展论坛暨博览会同期活动-海洋能源与数字化智能化论坛成功举办  168
点击报名 | 京东2025校招进校行程预告  164
华为纯血鸿蒙正式版9月底见!但Mate 70的内情还得接着挖...  161
本周热议
我的信创开放社区兼职赚钱历程 40
今天你签到了吗? 27
信创开放社区邀请他人注册的具体步骤如下 15
如何玩转信创开放社区—从小白进阶到专家 15
方德桌面操作系统 14
我有15积分有什么用? 13
用抖音玩法闯信创开放社区——用平台宣传企业产品服务 13
如何让你先人一步获得悬赏问题信息?(创作者必看) 12
2024中国信创产业发展大会暨中国信息科技创新与应用博览会 9
中央国家机关政府采购中心:应当将CPU、操作系统符合安全可靠测评要求纳入采购需求 8

加入交流群

请使用微信扫一扫!