【发布时间】:2018-05-14 18:40:12
【问题描述】:
有这样一张Oracle表:
+----+-----+--------+
| ID | PID | NAME |
+----+-----+--------+
| 1 | | testX |
| 2 | | test2 |
| 3 | 2 | test3 |
| 4 | 3 | testX |
| 5 | 3 | test5 |
| 6 | 3 | test6 |
| 7 | 4 | test7 |
| 8 | 5 | test8 |
| 9 | 3 | test9 |
| 10 | 4 | test10 |
| 11 | 5 | testX |
| 12 | 5 | test12 |
+----+-----+--------+
,其中 pid 是父记录的 id。
需要输出所有符合条件的记录,以及它们的父记录,直到根记录。 此类父记录不应与在搜索阶段找到的父记录重复。
例如,在这个条件下where name = 'testX',应该得到这个结果:
+----+-----+-------+
| ID | PID | NAME |
+----+-----+-------+
| 1 | | testX |
| 2 | | test2 |
| 3 | 2 | test3 |
| 4 | 3 | testX |
| 5 | 3 | test5 |
| 11 | 5 | testX |
+----+-----+-------+
怎么做?
附:甲骨文 11.2.0.4.0。
【问题讨论】:
-
感谢您的回答。但是,如果有多个条件,并且在树中需要正确的输出顺序怎么办。
-
不知道需求很难给你答案。我下面的回答仅基于您提供的信息。我也不确定“树中需要正确的输出顺序”是什么意思
-
例如表中有
Code1(varchar2)和Code2(number)字段,需要按条件where name = 'test10' and code1 = 'test1' and code2 = 5查找。短语“树中需要正确的输出顺序”是指我需要将order siblings by应用于查询,例如order siblings by name, code2, code1。 -
我可以根据史莱克的回答来做到这一点(期望的
order siblings by),但到目前为止,我已经设法仅使用对表的 2 次访问来实现这一点,因为它看起来像order siblings by像我一样工作只有在start with pid is null的情况下才需要。
标签: sql oracle connect-by hierarchical-query