2011-02-03 6 views
0

한다고 가정 i를 SQL 테이블에 다음이 : 나는 "목록을 선택하여 수행 한 후 제외로 적어도 하나 개의 경로를 표시 할 것입니다선택의 부모 노드

path 
------ 
/
/a 
/a/a 
/a/b 
/a/b/c 
/b 

을 비 제외 된 부모 노드 "질의를 참조하십시오.

다양한 시나리오에 대한 원하는 출력은 다음과 같습니다

Scenario Excluded Path(s) Desired Output Remarks 
1   /a    /b    because /a/a, /a/b, /a/b/c are children of /a 

2   /b    /a 

3   /a/b    /a    because /a/a is not excluded 
          /b 

4   /a/a    /b    because /a/b/c is the only child of /a/b 
      /a/b/c       and /a/a and /a/b are children of /a 

답변

0

내가 바로 당신을 이해한다면, 당신의 proble는 "노드"와 "경로"와 거의 관계가있다. 지정된 접두어로 시작하지 않는 문자열 (경로)을 찾고 있습니다. 그렇다면 문제는 간단합니다 (here).

For a given path P, find top-level nodes 
having any children not on path P 

그러나, 세 번째와 네 번째 원하는 결과가이 규칙을 따르도록 표시되지 않습니다, 그래서 하나는 너무 늦었 내가이 답변을하거나해서는 안 :

+0

아니요, 아닙니다. :) – user593996

1

그래서 더 완전하게 명시합니다 규칙이 명확하게 정의되어 있지 않습니다.

어쨌든 SQL에서이 작업을 수행하는 것은 문자열을 사용하는 것이 까다 롭지 만 모든 문자가 하나이며 슬래시로 구분되어 있다고 가정합니다.

select left(path,1) as topNode 
    from theTable 
where path not like '/x/y%' 
group by left(path,1) 

내가 아닌 것으로 간주하는 한 문자가 아닌 경우 테이블에 어떻게 저장되는지 검토해야합니다.

+0

아니요, 나열된 원하는 결과가 정확합니다. :) – user593996

관련 문제