数据库SQL高阶操作1——Mysql8转换DM8相关sql语法写法优化调整,包括递归,函数,以及方言等特殊操作的改造支持

发布于:2025-08-07 ⋅ 阅读:(15) ⋅ 点赞:(0)

在实际项目开发过程中,尤其是当前各国之间的技术博弈异常剧烈,加上国内对于开源项目或者国产项目的支持度越来越高,因此在适配有关涉及国内政府高校以及国央企单位项目时,DM数据库的选择成了一个必需的操作,也是一个不得已而为之的选择,所以才有了Mysql8转换DM8改造和调整这篇文章。

序言:dm数据库可视化链接工具

官方推荐可使用SQLark,官方链接如下:

https://www.sqlark.com/

一.字符串转换出错

在mysql语法的查询中,即使数据类型不一致的情况下依然可以正常执行查询,但是DM在关联查询是必需保证关联条件的数据类型一致。

二.递归语法改造,可参照oracle语法

1.DM8下递归语法的说明
select fie1,fie2... 
from tab1
-- 开始查询的父级条件,也可以是where后面的查询条件
-- 如果没有,可以写成查询所有“START WITH 1 = 1”
START WITH pid = '66c59905'
-- 关联子级的条件(需要参照START WITH来确定)
-- 从树的根节点依次往下(最后的叶节点)查询:PRIOR id =  pid
-- 从树的最后叶节点依次往上(到根节点)查询:id = PRIOR  pid
CONNECT BY PRIOR id =  pid

其他相关具体请参考dm下语法和示例说明:

DM8递归语法说明1

DM8递归语法说明2

DM8递归语法说明3

2.Mysql8下递归基础写法
with RECURSIVE sDBa as (
        select * from
        Serv_Area_Info
        where
        pid = '66c59905'
        union
        select defAreaDB.* from
        Serv_Area_Info defAreaDB
        inner join sDBa as PRIOR on PRIOR.id = defAreaDB.pid
        )
select * from sDBa
3.DM8下基于Mysql8基础递归语法改造
select * from Serv_Area_Info 
START WITH pid = '66c59905'
CONNECT BY PRIOR  id =  pid
4.Mysql8下递归关联子查询
with RECURSIVE sDBa as 
(       select * from Serv_Area_Info              
    	where         id in   (         select defenceAreaId         from Serv_defenceArea         where relateId = '66c59905'         )          
        union          
        select defAreaDB.* from Serv_Area_Info defAreaDB          
        inner join sDBa as PRIOR on PRIOR.id = defAreaDB.pid         
)         
select * from sDBa 
5.DM8下基于Mysql8递归关联子查询改造
select id from Serv_Area_Info 
START WITH 
id  in (         select defenceAreaId         from Serv_defenceArea         where relateId = '66c59905'         )
CONNECT BY PRIOR  id =  pid 

三.不同数据库的方言和函数改造说明

1.DM8数据库不支持【`fie`】,须使用单引号或者双引号'fie'

2.Mysql8字符串分析函数 group_concat()在DM8下不支持,须使用WM_Concat()


网站公告

今日签到

点亮在社区的每一天
去签到