Нахождение Глубины Потомка в Таблице Списка Смежности - PullRequest
2 голосов
/ 20 октября 2010

Вопрос

Пример таблицы

+-------------+----------------------+--------+
| 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", чтобы найти уровень данного идентификатора. Например, «MP3-плееры» имеют УРОВЕНЬ 3.

Пример заимствован из Управление иерархическими данными в MySQL

Решение

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

1 Ответ

2 голосов
/ 20 октября 2010

Вы можете использовать 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
...