mysql函數遞歸


我記得oracle,sql server等可以直接在sql語句上遞歸,但mysql卻沒有

換一種思路,用函數遞歸

DROP FUNCTION IF EXISTS findOrgan;//DROP是刪除這個表
CREATE FUNCTION findOrgan//5(areaId VARCHAR(255)//1)
RETURNS VARCHAR(4000)
BEGIN
DECLARE sTemp VARCHAR(4000);
DECLARE sTempChd VARCHAR(4000);

SET sTemp='$';
SET sTempChd = CAST(areaId AS CHAR);

WHILE sTempChd IS NOT NULL DO
SET sTemp= CONCAT(sTemp,',',sTempChd);
SELECT GROUP_CONCAT(OR_ID)//2 INTO sTempChd FROM sys_organ//3 WHERE FIND_IN_SET(PARENT_ID//4,sTempChd)>0;
END WHILE;
RETURN sTemp;
END;

這是查詢某組織節點及它下屬所有節點,

1.這是輸入參數的類型

2.這是組織表組織id

3這是組織表

4這是組織表父級id

5這是你要定義的函數名

我用的是navicat,點擊運行之后就可以看到

接下來我們測試一下

查詢了所有的組織id為1的下屬id(包括自身)

SELECT OR_ID from sys_organ where FIND_IN_SET(OR_ID,findOrgan(1))

這是數據庫查詢組織id為1的下屬id,示例如下

那么用這些id也就可以查到我們想要的數據了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM