SQL для удобного извлечения древовидной структуры

Учитывая простую структуру данных:

ID    |    Category_Name    |    Parent_ID

Пример:

1          Cars                    0
2          Boxes                   0
3          Lamborghinis            1
4          VW Camper Vans          1
5          Big Boxes               2
6          Small Boxes             2
7          Cereal Boxes            2
8          Broken Lambos           3
9          Yellow Ones             3
10         Rusty                   8
11         Milkshake Stained       8
12         Chocolate Flavour       11
13         Strawberry              11
14         Indiscernible Solution  11

Представляя простую древовидную структуру навигации, какой программно был бы лучший способ получить дерево в презентабельном формате? Можем ли мы создать оператор SQL, чтобы получить их «по порядку»?

Спасибо за любую помощь! Если мой подход неверен, не стесняйтесь комментировать.

Я использую SQL-Server 2000.

7
задан Tom Gullen 24 August 2010 в 10:00
поделиться

2 ответа

Я обычно строю древовидную структуру в коде моего приложения. Частично потому, что я более уверен в C #, чем в SQL, но также потому, что мне обычно все равно нужно преобразовать данные в подходящие структуры C #.

SQL плохо справляется с рекурсивными структурами, такими как списки и деревья. Если бы мне пришлось поместить построение дерева в свою базу данных, я бы выбрал хранимую процедуру. Но может быть хитрый способ, о котором я не знаю.

Если вы используете Oracle, вы можете что-нибудь взломать с помощью Connect By .

2
ответ дан 7 December 2019 в 09:55
поделиться

Не для SQL2000, но если вам удастся перейти на 2k5, вы можете сделать

WITH t AS(SELECT id, parent_id, category_name FROM mytable WHERE parent_id IS NULL
          UNION ALL
          SELECT c.id, c.parent_id, c.category_name FROM t p JOIN mytable c ON c.parent_id = p.id)
SELECT * FROM t
2
ответ дан 7 December 2019 в 09:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: