Запрос T-SQL: получение дочерних узлов родительского узла - PullRequest
1 голос
/ 30 августа 2010

У меня есть таблица со следующей схемой:

ID , CatID, ParentCatID, SiteID

Я хочу получить все сайты, которые относятся к категориям, являющимся корнями (означает их ParentCatID = 0) и всех их потомков.

например:

ID , CatID, ParentCatID, SiteID
--------------------------------
1  , 2    , 0          , 3
1  , 4    , 2          , 6
1  , 5    , 4          , 7

В этом примере CatID 2 является родительским для 4, а 4 является родительским для 5.

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

1 Ответ

5 голосов
/ 30 августа 2010

Использование рекурсивного общего табличного выражения, поддерживаемого в SQL Server 2005 + :

WITH hierarchy AS (
  SELECT yt.id, 
         yt.catid,
         yt.parentcatid,
         yt.siteid
    FROM YOUR_TABLE yt
   WHERE yt.parentcatid = 0
  UNION ALL
  SELECT yt.id, 
         yt.catid,
         yt.parentcatid,
         yt.siteid
    FROM YOUR_TABLE yt
    JOIN hierarchy h ON h.catid = yt.catid)
SELECT t.*
  FROM hierarchy t
OPTION (maxrecursion 1000)

Если вы получите:

Заявление прекращено. Максимальная рекурсия 100 была исчерпана до завершения оператора

По умолчанию установлено 100 рекурсий. Максимальное количество рекурсий может быть установлено с помощью опции maxrecursion, но не более 32767.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...