Oracle轉(zhuǎn)換MySql之遞歸start with詳解
更新時間:2024年12月23日 09:04:10 作者:海沫汐
Oracle中的`startwith`函數(shù)在MySQL中需要轉(zhuǎn)換為使用`LIKE`操作符,并且可能需要自定義函數(shù)來實(shí)現(xiàn)類似的功能
Oracle轉(zhuǎn)換MySql之遞歸start with
Oracle轉(zhuǎn)換Mysql之start with
oracle轉(zhuǎn)mysql其實(shí)很多細(xì)節(jié),這邊就不一 一 描述了,這邊先整理些“坎”吧!
Oracle中start with…
select * from grade_group gg start with gg.group_code=#{groupCode} connect by gg.parent_id= prior gg.id order by gg.group_level
轉(zhuǎn)換為MySql為
SELECT * FROM grade_group WHERE FIND_IN_SET(ID, getGradeGroupChild(#{groupCode})) ORDER BY group_level
這里并非只要簡單改下sql就行
可以看出需要一個函數(shù)支撐"getGradeGroupChild"
下面提供了這個函數(shù)
DROP FUNCTION IF EXISTS `getGradeGroupChild`; DELIMITER $$ CREATE FUNCTION `getGradeGroupChild`(GROUPCODE VARCHAR(100)) RETURNS VARCHAR(10000) CHARSET utf8 BEGIN DECLARE sChildList VARCHAR(10000); DECLARE sChildTemp VARCHAR(1000); --這里我第一次是要將傳進(jìn)來的GROUPCODE 轉(zhuǎn)換成id,然后去遞歸查詢 SELECT id INTO sChildTemp FROM grade_group WHERE GROUP_CODE = GROUPCODE; WHILE sChildTemp IS NOT NULL DO IF (sChildList IS NOT NULL) THEN SET sChildList = CONCAT(sChildTemp,',',sChildList); ELSE SET sChildList = CONCAT(sChildTemp); END IF; SELECT GROUP_CONCAT(id) INTO sChildTemp FROM grade_group WHERE FIND_IN_SET(PARENT_ID, sChildTemp)>0; END WHILE; RETURN sChildList; END$$ DELIMITER ;
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Oracle表中重復(fù)數(shù)據(jù)去重的方法實(shí)例詳解
這篇文章主要介紹了Oracle表中重復(fù)數(shù)據(jù)去重的方法實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-07-07Oracle用PLSQL導(dǎo)出導(dǎo)入dmp表詳細(xì)圖解
dmp是二進(jìn)制文件,可跨平臺還能包含權(quán)限,效率好,這篇文章主要給大家介紹了關(guān)于Oracle用PLSQL導(dǎo)出導(dǎo)入dmp表的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-11-11Oracle數(shù)據(jù)庫中通用的函數(shù)實(shí)例詳解
OracleSQL提供了用于執(zhí)行特定操作的專用函數(shù),這些函數(shù)大大增強(qiáng)了SQL語言的功能,下面這篇文章主要給大家介紹了關(guān)于Oracle數(shù)據(jù)庫中通用函數(shù)的相關(guān)資料,需要的朋友可以參考下2022-03-03