首先创建数据表tmpCity,结构与数据如下(id标识,title名称,parentID父级id,leaves几级分类):
oracle 根据id,查询其上下级的所有组织:
--查询下级的所有区域
select * from tmpCity A where id<>1 start with A.id=1 connect by prior A.ID = A.Parentid
--查询上级的所有区域
select * from tmpCity A start with A.id=13 connect by prior A.Parentid=A.Id;
--查询下级的所有区域
with cte_child(ID,ParentID,Title,levels)
as
(
--起始条件
select ID,ParentID,Title,levels from tmpCity where id = '1' --列出父节点查询条件
union all
--递归条件
select a.ID,a.ParentID,a.title,a.levels from tmpCity a
inner join
cte_child b
on ( a.ParentID=b.ID) --根据查询到的父节点(a.Parent),通过CTE递归查询出其子节点(b.ID)
)
select * from cte_child;
--查询树状结构某节点的上级所有根节点。
with cte_root(ID,ParentID,title,levels)
as
(
--起始条件
select ID,ParentID,title,levels from tmpCity where id = '13' --列出子节点查询条件
union all
--递归条件
select a.ID,a.ParentID,a.title,a.levels from tmpCity a
inner join
cte_root b
on a.ID=b.ParentID --根据基础表条件查询子节点(a.ID),通过CTE递归找到其父节点(b.ParentID)。
)
select * from cte_root ;
MySql根据id,查询其上下级的所有组织:
CREATE FUNCTION getChildList(rootId INT) #rootId为你要查询的节点。
RETURNS VARCHAR(1000)
BEGIN
DECLARE pTemp VARCHAR(1000);
DECLARE cTemp VARCHAR(1000); #两个临时变量
SET pTemp = '$';
SET cTemp =cast(rootId as CHAR); #把rootId强制转换为字符。
WHILE cTemp is not null DO
SET pTemp = concat(pTemp,',',cTemp); #把所有节点连接成字符串。
SELECT group_concat(id) INTO cTemp FROM tmpcity
WHERE FIND_IN_SET(parentId,cTemp)>0;
END WHILE;
RETURN pTemp;
END
select * from tmpcity where FIND_IN_SET(id,getChildList(1))