oracle支持树形递归查询start with ... connect by ,但mysql不支持,不过可以通过创建函数来实现递归查询。
创建函数
DELIMITER //
DROP FUNCTION IF EXISTS f_get_suborg;
CREATE FUNCTION f_get_suborg(parentId VARCHAR(5000))
RETURNS VARCHAR(5000)
BEGIN
DECLARE oTemp VARCHAR(5000);
DECLARE oTempChild VARCHAR(5000);
SET oTemp = '';
SET oTempChild =parentId;
WHILE oTempChild is not null DO
IF oTemp != '' THEN
SET oTemp = concat(oTemp,',',oTempChild);
ELSE
SET oTemp = oTempChild;
END IF;
SELECT group_concat(org_ID) INTO oTempChild FROM dbname.base_organizational where parentId<>org_ID and FIND_IN_SET(parent_id,oTempChild)>0;
END WHILE;
RETURN oTemp;
END//
DELIMITER ;
--备注:表名和字段名记得替换
赋权:
GRANT EXECUTE ON FUNCTION `dbname`.f_get_suborg TO 'user_name'@'%';
执行:
SELECT * FROM dbname.base_organizational WHERE FIND_IN_SET(parent_id,dbname.f_get_suborg('1'));
本文介绍了如何在MySQL中通过创建函数f_get_suborg实现类似于Oracle的树形递归查询,展示了函数的创建过程、赋权和执行示例,适合对递归查询有需求但MySQL不支持的开发者。
494

被折叠的 条评论
为什么被折叠?



