sql вернуть вложенный набор результатов? - PullRequest
1 голос
/ 30 апреля 2011

Возможно ли, чтобы один SQL-запрос возвращал вложенную структуру вместо рекурсивных вызовов БД для создания массива или объекта?

Я использую нечто похожее на этот псевдокод для создания:

parentCategory = 'SELECT * 
                    FROM Category 
                   WHERE child_category IS NULL 
                     AND ParentIDNo IS NULL';   

while parentCategory do
      childCategory = 'SELECT * 
                         FROM Category 
                        WHERE parent_id = parentCategory.id'; 
   if (parentCategory.id)
      do recursive  'SELECT * 
                       FROM Category 
                      WHERE parent_id = parentCategory.id';
end  


    Cat_1
    -child_1
    -child_2
    --grandchild_1  
    Cat_2
    -child_1
    -child_2
    --grandchild_1

Ответы [ 3 ]

4 голосов
/ 30 апреля 2011

Проверить рекурсивные ctes предполагает sql 2005 или более позднюю версию

0 голосов
/ 30 апреля 2011

Это очень возможно, если вы используете SQL 2005 и выше.Учебник по иерархическому запросу см. Здесь: http://www.ienablemuch.com/2010/04/simple-hierarchical-query-display.html

0 голосов
/ 30 апреля 2011

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

Например, если у вас был путь к дереву, будет "cat_1 | child_2 |grandchild_1 "для узла grandchild_1 дерева, тогда вы сможете разбить строку для загрузки на дерево, а также сможете определить уровень в дереве, на котором вы были.Кроме того, когда вы выбираете из таблицы, вы сможете упорядочить по пути, и дерево получится именно так, как вы хотели его нарисовать.

минус в том, что вам придется поддерживать этот путь при любых изменениях.к дереву.

...