我的日期以树形结构组织。
以下适用(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