[SQL] 부모 자식 관계에 대한 SQL 쿼리
SQL부모 자식 관계에 대한 SQL 쿼리
나는 부모 자식 관계 등으로 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 쿼리를 작성합니다.
예를 들면 노드 아이디 = 1의 경우, 3, 4, 5, 6을 반환한다.
나는 2005 MS SQL 서버를 사용하고 있습니다
해결법
-
==============================
1.
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]
-
==============================
2.당신은 SQL 데이터베이스 내에서 부모 - 자식 관계의 중첩 된 세트 모델을 사용하여 조사한다. 그것은이 같은 테이블에 레코드의 parentID를 저장하는 것보다 훨씬 좋네요, 그리고이 같은 쿼리가 훨씬 쉬워집니다.
당신은 SQL 데이터베이스 내에서 부모 - 자식 관계의 중첩 된 세트 모델을 사용하여 조사한다. 그것은이 같은 테이블에 레코드의 parentID를 저장하는 것보다 훨씬 좋네요, 그리고이 같은 쿼리가 훨씬 쉬워집니다.
-
==============================
3.그리고 단지 자체의 자사의 부모가 (이 중단 될 때까지 그렇지 않으면 재귀) 경우 확인이 작동하는지 확인합니다 :
그리고 단지 자체의 자사의 부모가 (이 중단 될 때까지 그렇지 않으면 재귀) 경우 확인이 작동하는지 확인합니다 :
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]
-
==============================
4.
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
from https://stackoverflow.com/questions/207309/sql-query-for-parent-child-relationship by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL 서버 - 부울 리터럴? (0) | 2020.06.25 |
---|---|
[SQL] 선별에 SQLite는 지원에게 IF (조건) 문의 어떤 종류를합니까 (0) | 2020.06.25 |
[SQL] MySQL은 : 프로그래밍 방식으로 외래 키 관계를 결정하기 위해? (0) | 2020.06.25 |
[SQL] 구체화 된 경로 트리를 정렬? (0) | 2020.06.25 |
[SQL] 단정를 사용하면 5 개 이상 유형의지도로 (0) | 2020.06.25 |