노드의 모든 부모를 찾는 일반적인 CTE의 변형입니다. 차이는 다음과 같습니다.공통 테이블 표현식 여기서 두 열에는 루트가 없습니다.
- 가장 큰 하위 항목에는
null
아이가 없습니다. 대신, 이것은 단순히child
열에 없습니다. 이 경우insert into t (parent, child) values (1, 2) insert into t (parent, child) values (1, 3) insert into t (parent, child) values (4, 2) insert into t (parent, child) values (2, 5) insert into t (parent, child) values (2, 6) insert into t (parent, child) values (9, 6) insert into t (parent, child) values (6, 7) insert into t (parent, child) values (6, 8) with cte as ( select child, parent, 0 as level from t where parent = 5 union all select q.child, q.parent, level+1 from t q inner join cte as c on c.parent= q.child ) select distinct parent from cte where parent <> 5
, 내가
5
에 대한 모든 부모를 얻을 때5
사람에 부모가 아니기 때문에, 아무 것도 발견되지 :
여기 내 시도이다. 2
에 대한 부모를 모두 찾으면 2
은 5
및 6
의 부모이므로 성공합니다.
. 2 및 6은 아이들처럼 두 번 나열됩니다. 심지어 복사/붙여 넣기 오류라고 생각하는 필드 이름을 전환했습니다. 귀하의 cte는 계층 구조를 buld 것입니다, 당신은 결과를 좋아하지 않을 수도 있습니다 6 가장 큰 인구가 –
나는 그것이 나무라고 결코. 아이가 여러 부모를 가질 수 없거나 부모가 여러 자녀를 가질 수 없다고 말하는 것은 없습니다. – jiaweizhang
무료/임시 방편 인 경우 괜찮습니다. 자녀가 여러 명의 부모를 가질 수 있다는 데 동의합니다 (즉, 보고서는 위험 분석 및 분기 별 결과에 속할 수 있음). 그렇다면 왜 그 질문입니까? 분명히 5는 부모가 아닙니다. –