2011-10-04 3 views
1

아래와 같은 트리 쿼리가 있는데 Name = 'Son'을 필터링하고 모든 상위 레코드를 선택하여 결과가 처음 3 개의 행을 가져와야하는 경우. 쿼리를 어떻게 구성합니까? Common Tables Expression (CTE)을 사용해야한다고 읽었지 만 CTE의 초보자입니다. 누구든지 나를 도울 수 있습니까? 감사. 당신이 테이블에 나무를 저장 (또는 위의 SQL을 사용하여 뷰를 정의) 할 수처럼Filtering SQL Tree 쿼리

select 1 AS id, NULL AS parent, 'God' AS name 
    UNION 
    select 2 AS id, 1 AS parent, 'Father' AS name 
    UNION 
    select 3 AS id, 2 AS parent, 'Son' AS name 
    UNION 
    select 4 AS id, NULL AS parent, 'Godmother' AS name 
    UNION 
    select 5 AS id, 4 AS parent, 'Mother' AS name 
+1

사용중인 데이터베이스 엔진 및 버전은 무엇입니까? – Lamak

+0

http://stackoverflow.com/questions/7651686/recursive-query-to-find-the-parent-record/ – Magnus

답변

1

는 소리, 그리고 Oracle을 사용하는 경우 그런 다음 레코드를 필터링하는 기능에 의해 CONNECT를 사용할 수 있습니다.

0

이게 당신이 찾고 있는게 있나요?

;with SomeCTE as 
(
select * 
from (
select 1 AS id, NULL AS parent, 'God' AS name  
UNION  
select 2 AS id, 1 AS parent, 'Father' AS name  
UNION  
select 3 AS id, 2 AS parent, 'Son' AS name  
UNION  
select 4 AS id, NULL AS parent, 'Godmother' AS name  
UNION  
select 5 AS id, 4 AS parent, 'Mother' AS name) as a 
) 
select * 
from SomeCTE a 
left join SomeCTE b 
on a.parent = b.id 
left join SomeCTE c 
on b.parent = c.id 
where a.name = 'son'