부모 아동 관계를위한 SQL 쿼리
-
03-07-2019 - |
문제
부모의 자녀 관계가있는 DB 테이블이 있습니다.
NodeId NodeName ParentId
------------------------------
1 Node1 0
2 Node2 0
3 Node3 1
4 Node4 1
5 Node5 3
6 Node6 5
7 Node7 2
여기서 ParentID = 0은 루트 레벨 노드임을 의미합니다. 이제 부모 카테고리의 모든 수준에서 자식을 반환하는 SQL 쿼리를 작성하고 싶습니다.
예를 들어 Nodeid = 1의 경우 3, 4, 5, 6을 반환해야합니다.
MS SQL Server 2005를 사용하고 있습니다
해결책
with [CTE] as (
select * from [TheTable] c where c.[ParentId] = 1
union all
select * from [CTE] p, [TheTable] c where c.[ParentId] = p.[NodeId]
)
select * from [CTE]
다른 팁
SQL 데이터베이스 내에서 부모-자식 관계에 중첩 세트 모델을 사용해야합니다. 이와 같이 테이블에 레코드의 부모를 저장하는 것보다 훨씬 좋습니다.
그리고 그 자체의 부모가 작동하는지 확인하기 위해 (그렇지 않으면 부러 질 때까지 재발합니다) :
with [CTE] as (
select * from [TheTable] c where c.[ParentId] = 1
union all
select * from [CTE] p, [TheTable] c where c.[ParentId] = p.[NodeId]
and c.[ParentId] <> c.[NodeId]
)
select * from [CTE]
WITH Temp_Menu AS
(
SELECT AM.* from FCB_AccessMenu AM where AM.[ParentId] = 6
UNION ALL
SELECT AM.* FROM FCB_AccessMenu AM ,Temp_Menu TM WHERE AM.[ParentID]=TM.[MenuID]
)
SELECT * FROM Temp_Menu ORDER BY ParentID
제휴하지 않습니다 StackOverflow