当前位置:   article > 正文

MySQL实现树状所有子节点查询的方法以及所有父节点查询的方法_怎么sql查询树下面不存在子节点的数据

怎么sql查询树下面不存在子节点的数据

递归获取当前节点下面的所有子节点数据 

  1. mysql 添加一个函数  getChild  
  2. CREATE DEFINER=`root`@`localhost` FUNCTION `getChild`(rootId INT) RETURNS varchar(1000) CHARSET utf8
  3. BEGIN
  4.         DECLARE ptemp VARCHAR(1000);
  5.         DECLARE ctemp VARCHAR(1000);
  6.                SET ptemp = '#';
  7.                SET ctemp =CAST(rootId AS CHAR);
  8.                WHILE ctemp IS NOT NULL DO
  9.                  SET ptemp = CONCAT(ptemp,',',ctemp);
  10.                 SELECT GROUP_CONCAT(id) INTO ctemp FROM fht_ams_dept   
  11.                 WHERE FIND_IN_SET(pid,ctemp)>0; 
  12.                END WHILE;  
  13.                RETURN ptemp;  
  14.     END

 

  1. @Query(value = " select id from fht_ams_dept where find_in_set(id,getChild(?1))" ,nativeQuery = true)
  2. List<Long> findAllDeptIdChild(Long pid);

递归获取当前节点上面的所有父节点数据

  1. mysql 添加一个函数
  2. CREATE DEFINER=`root`@`%` FUNCTION `getParList`(rootId INT) RETURNS varchar(1000) CHARSET utf8mb4
  3. BEGIN
  4. DECLARE sTemp VARCHAR(1000);
  5. DECLARE sTempPar VARCHAR(1000);
  6. SET sTemp = '';
  7. SET sTempPar =rootId;
  8. WHILE sTempPar is not null DO
  9. IF sTemp != '' THEN
  10. SET sTemp = concat(sTemp,',',sTempPar);
  11. ELSE
  12. SET sTemp = sTempPar;
  13. END IF;
  14. SET sTemp = concat(sTemp,',',sTempPar);
  15. SELECT group_concat(pid) INTO sTempPar FROM fht_ams_dept where pid<>id and FIND_IN_SET(id,sTempPar)>0;
  16. END WHILE;
  17. RETURN sTemp;
  18. END
  1. @Query(value = " select id from fht_ams_dept where status=1 and find_in_set(id,getParList(?1))" ,nativeQuery = true)
  2. List<Long> findAllDeptIdParent(Long id);

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/442190
推荐阅读
相关标签
  

闽ICP备14008679号