내 날짜는 트리 구조로 구성됩니다.동일한 테이블의 중첩 된 조인 (트리 구조)
다음이 적용됩니다 (오라클 SQL 구문) :
select name, id <<<TODO LOGIC>> where id = 1
내가
| name | id |
| a | 1 |
| a.1 | 2 |
| a.2 | 3 |
| a.2.1 | 4 |
| a.2.2 | 5 |
을 얻을 것입니다 : 내가 쿼리 수 있도록, id로 전체 트리를 돌려 싶습니다
CREATE TABLE TREE
(
NAME VARCHAR2(20),
ID NUMBER(10, 0),
PARENT NUMBER(10, 0)
)
;
INSERT INTO "TREE" (NAME, ID) VALUES ('a', '1');
INSERT INTO "TREE" (NAME, ID, PARENT) VALUES ('a.1', '2', '1');
INSERT INTO "TREE" (NAME, ID, PARENT) VALUES ('a.2', '3', '1');
INSERT INTO "TREE" (NAME, ID, PARENT) VALUES ('a.2.1', '4', '3');
INSERT INTO "TREE" (NAME, ID, PARENT) VALUES ('a.2.2', '5', '3');
INSERT INTO "TREE" (NAME, ID) VALUES ('b', '6');
하위 트리에 대해
을 얻을 수 있습니다.
select name, id <<<TODO LOGIC>> where id = 3
내가
| name | id |
| a.2 | 3 |
| a.2.1 | 4 |
| a.2.2 | 5 |
로 평면 항목 B에 대한, 그것은
select name, id <<<TODO LOGIC>> where id = 6
내가 얻을 것이다 얻을 것이다 얻을 것
| name | id |
| b | 6 |
그것은 밖으로 쿼리를 가입 왼쪽이 일반 보인다 이 목적을 달성하지 못하거나 뭔가를 놓치고 있습니까?
다음 쿼리는 전체 구조를 반환하지만 으로 필터링을 시작하면 문이 실패합니다.
select t1.id t1Id, t2.id t2Id, t1.name t1Name, t2.name t2Name from tree t1 left outer join tree t2 on t1.id = t2.parent
고맙습니다, SELECT ID, 이름, 부모 FROM tree id =로 시작 하시겠습니까? 먼저 CONNECT BY id = parent; 사실 해결책입니다. 그레이트 :) –
당신을 진심으로 환영합니다. 계획된 데이터 볼륨에서 쿼리 속도를 테스트하십시오. 말했듯이 (특히 테이블을 더 조인하거나 추가 조건을 추가하는 경우) 때때로 속도가 느려질 수 있습니다. –