mysql级联查询

实现效果 例如:  中国 下的 省 市 县 乡 
输入 省的id 能把该省下的市,县,乡全部查出来,输入该市的id 可以把 该市下的 县,乡全部查出来

oracle 级联查询:oracle有内置函数  start with …connect by prior 直接实现级联效果如
select a.* from T_depart  a start with depid=’213520′ connect by prior depid=pdepid

depid是指 部门编号, pdepid是指上级部门编号  
depid=’213520′  是指查递归depid=213520的部门即查出 depid是213520
的子节点,孙节点,重孙节点,……

不过在mysql 中就有点麻烦了,得创建方法,并调用:
mysql中:创建function:
 DELIMITER $$
USE `device`$$
DROP FUNCTION IF EXISTS `getChildList`$$
CREATE DEFINER=`root`@`localhost` FUNCTION `getChildList`(rootId VARCHAR(100)) RETURNS VARCHAR(1000) CHARSET utf8
BEGIN
       DECLARE pTemp VARCHAR(1000);  
       DECLARE cTemp VARCHAR(1000);
       SET pTemp = ‘$’;  
       SET cTemp = rootId;  
      
       WHILE cTemp IS NOT NULL DO  
         SET pTemp = CONCAT(pTemp,’,’,cTemp);  
         SELECT GROUP_CONCAT(depid) INTO cTemp FROM
T_depart  
         WHERE FIND_IN_SET(pdepid,cTemp)>0;
       END WHILE;  
       RETURN pTemp;
    END$$
DELIMITER ;

通过 
select getChildList(‘213520‘) from dual 可以验证查出 id是213520及它以下节点的id 例如 我的结果是
$,213520,21352012,21352013
通过
select * from ‘T_depart’ where find_in_set (depid,getChildList(‘213520‘));
就会查出 T_depart这个表中,
id = ‘213520’ 及其子孙节点的详细信息。

你可能感兴趣的:(数据库,SQL)