2010-10-20 38 views
2

問題查找後裔深度在鄰接表表

示例表

+-------------+----------------------+--------+ 
| 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應該能夠沿行寫SQL 「SELECT ... CONNECT BY」查找給定ID的級別。例如,「MP3播放器」具有Managing Hierarchical Data in MySQL

解決方案借來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 

回答

2

您可以使用level虛列來獲取當前行的「深度」 。考慮以下語句:

SELECT category_id, name, level, 
PRIOR name as parent_category 
FROM test_table 
START WITH parent is null 
CONNECT BY PRIOR category_id = parent 
+1

這是朝着正確方向邁出的一步:更具體地說,我正在尋找使我具有特定id級別(例如7)的SQL。在我自己做了一些額外的搜索之後,我添加了我提出的解決方案以解決最初的問題。 – orangepips 2010-10-20 19:44:14