实现效果 例如: 中国 下的 省 市 县 乡
输入 省的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’ 及其子孙节点的详细信息。
mysql级联查询
最新推荐文章于 2024-06-18 08:41:53 发布