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

在实际项目开发过程中,尤其是当前各国之间的技术博弈异常剧烈,加上国内对于开源项目或者国产项目的支持度越来越高,因此在适配有关涉及国内政府高校以及国央企单位项目时,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关键字将递归查询的结果作为临时表,以备新查询使用
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基础递归语法改造,同时利用with关键字将递归查询的结果作为临时表,以备新查询使用
WITH tempDB AS ( 
    select * from Serv_Area_Info 
    START WITH pid = '66c59905'
    CONNECT BY PRIOR  id =  pid
}
select * from tempDB;
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()

3.DM8数据库不支持【""】,如果varchar比较时请选择【''】

4.DM8数据库当前日期加任意值,不支持mysql的INTERVAL 1 DAY()写法

更多日期运算请参看如下官方文档:

https://eco.dameng.com/document/dm/zh-cn/sql-dev/practice-date.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值