【发布时间】:2016-07-23 04:19:12
【问题描述】:
我正在努力进行分层 SQL 查询(使用 Oracle)。假设我有具有唯一 ID 的小部件表。一个小部件只能被复制一次,我们从新的小部件中跟踪父 id。例如,假设小部件 100 被复制并成为小部件 101,然后是 103,然后是 105。
id parent_id
100
101 100
102
103 101
104
105 103
CREATE TABLE WIDGETS (ID NUMBER NOT NULL, PARENT_ID NUMBER);
INSERT INTO WIDGETS (ID, PARENT_ID) VALUES (100, null);
INSERT INTO WIDGETS (ID, PARENT_ID) VALUES (101, 100);
INSERT INTO WIDGETS (ID, PARENT_ID) VALUES (102, null);
INSERT INTO WIDGETS (ID, PARENT_ID) VALUES (103, 101);
INSERT INTO WIDGETS (ID, PARENT_ID) VALUES (104, null);
INSERT INTO WIDGETS (ID, PARENT_ID) VALUES (105, 103);
(102 和 104 只是虚拟数据)
我正在尝试使用关系中的任何 id 进行查询以显示小部件的完整历史记录。
因此,如果我为查询提供“103”(或“100”...或“105”)的 id,我希望查询返回如下内容:
id parent_id
100
101 100
103 101
105 103
我尝试过使用 CONNECT BY PRIOR,但我需要按 ID 开头才能使用 start with。例如,我可以显示为查询提供源 id 的完整树:
select parent_id as from_id, id as to_id
from WIDGETS
start with id = 100
CONNECT BY PRIOR id = parent_id;
from_id to_id
null 100
100 101
101 103
103 105
但是如果我不一定知道以 id 开头怎么办?是否可以找到源 ID,然后从那里获取完整的树?
【问题讨论】: