Oracle 在邻接列表表中查找子体深度
问题Oracle 在邻接列表表中查找子体深度,oracle,oracle10g,hierarchical-data,Oracle,Oracle10g,Hierarchical Data,问题 SELECT MAX(level) "LEVEL" FROM TEST_TABLE START WITH category_id = 7 -- MP3 Players category_id CONNECT BY category_id = PRIOR parent ORDER BY LEVEL DESC 示例表 +-------------+----------------------+--------+ | category_id | name | p
SELECT MAX(level) "LEVEL"
FROM TEST_TABLE
START WITH category_id = 7 -- MP3 Players category_id
CONNECT BY category_id = PRIOR parent
ORDER BY LEVEL DESC
示例表
+-------------+----------------------+--------+
| category_id | name | parent |
+-------------+----------------------+--------+
| 1 | ELECTRONICS | NULL |
| 2 | TELEVISIONS | 1 |
| 3 | TUBE | 2 |
| 4 | LCD | 2 |
| 5 | PLASMA | 2 |
| 6 | PORTABLE ELECTRONICS | 1 |
| 7 | MP3 PLAYERS | 6 |
| 8 | FLASH | 7 |
| 9 | CD PLAYERS | 6 |
| 10 | 2 WAY RADIOS | 6 |
+-------------+----------------------+--------+
根据上面的示例表,我认为在Oracle中,我应该能够按照“SELECT…CONNECT BY”来编写SQL,以查找给定id的级别。例如,“MP3播放器”的级别为3
借鉴
解决方案
SELECT MAX(level) "LEVEL"
FROM TEST_TABLE
START WITH category_id = 7 -- MP3 Players category_id
CONNECT BY category_id = PRIOR parent
ORDER BY LEVEL DESC
您可以使用
level
pseudocolumn获取当前行的“深度”。考虑下面的陈述:
SELECT category_id, name, level,
PRIOR name as parent_category
FROM test_table
START WITH parent is null
CONNECT BY PRIOR category_id = parent
这是朝着正确的方向迈出的一步:更具体地说,我正在寻找能够为我提供特定id级别(例如7)的SQL。在我自己做了一些额外的搜索之后,我将我提出的解决方案添加到了最初的问题中。