私の日付はツリー構造で構成されています。
以下が適用されます(Oracle SQL構文)。
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');
IDで完全なツリーを返したいので、クエリの場合:
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 |
サブツリーの場合、次のようになります。
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 |
単純な省略された結合クエリはこの目的を達成できないようです、または私は何かを逃していますか?
次のクエリは完全な構造を返しますが、 whereステートメントでフィルタリングを開始すると失敗します。
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