Oracle轉換MySql之遞歸start with詳解
更新時間:2024年12月23日 09:04:10 作者:海沫汐
Oracle中的`startwith`函數(shù)在MySQL中需要轉換為使用`LIKE`操作符,并且可能需要自定義函數(shù)來實現(xiàn)類似的功能
Oracle轉換MySql之遞歸start with
Oracle轉換Mysql之start with
oracle轉mysql其實很多細節(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
轉換為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); --這里我第一次是要將傳進來的GROUPCODE 轉換成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 ;
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Oracle表中重復數(shù)據(jù)去重的方法實例詳解
這篇文章主要介紹了Oracle表中重復數(shù)據(jù)去重的方法實例詳解的相關資料,需要的朋友可以參考下2017-07-07Oracle數(shù)據(jù)庫中通用的函數(shù)實例詳解
OracleSQL提供了用于執(zhí)行特定操作的專用函數(shù),這些函數(shù)大大增強了SQL語言的功能,下面這篇文章主要給大家介紹了關于Oracle數(shù)據(jù)庫中通用函數(shù)的相關資料,需要的朋友可以參考下2022-03-03