1. Cenários de negócios
A empresa precisa consultar as informações do nó raiz de acordo com um nó filho. Muitas vezes é usado para fazer classificação infinita.
1. Verifique todos os departamentos pais por ID do departamento filho
O código é o seguinte (exemplo):
SELECT T2.*
FROM (
SELECT
@r AS _id,
(SELECT @r := parent_id FROM tbl_app_dept WHERE id = _id) AS parent_id, @l := @l + 1 AS lvl
FROM
(SELECT @r := '232', @l := 0) vars, tbl_app_dept h WHERE @r <> 0) T1
JOIN tbl_app_dept T2 ON T1._id = T2.id
ORDER BY T1.lvl DESC
2. Oracle Connect por implementação
#由叶子节点查根节点
select * from table start with id=1 connect by id = prior p_id
#由父节点查叶子节点
select * from table start with p_id=4 connect by prior id = p_id
3. Procedimento armazenado para visualizar todos os IDs de subdepartamentos
CREATE DEFINER=`root`@`%` FUNCTION `test_db`.`getChildList`(rootId varchar(1000)) RETURNS mediumtext CHARSET utf8
DETERMINISTIC
COMMENT '查询所有子部门id'
BEGIN
DECLARE sTemp MEDIUMTEXT;
DECLARE sTempChd MEDIUMTEXT;
SET sTemp = '$';
SET sTempChd =cast(rootId as CHAR);
WHILE sTempChd is not null DO
SET sTemp = concat(sTemp,',',sTempChd);
SELECT group_concat(dept_id) INTO sTempChd FROM tbl_app_dept where FIND_IN_SET(parent_id,sTempChd)>0;
END WHILE;
RETURN sTemp;
END