資料庫查詢父分類與子分類
阿新 • • 發佈:2019-02-08
首先建立資料表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;
sqlServer (2005以後)根據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))