SQL Server 2008 Иерархические запросы - PullRequest
1 голос
/ 30 июля 2011

У меня есть стол Locations(id, type, code, parentid).

Типом может быть СТРАНА / ГОСУДАРСТВО / РЕГИОН / ГОРОД. Таким образом, эта таблица содержит иерархические географические данные. В стране будет много штатов, много областей и областей много городов.

Мне нужно перечислить дочерние записи для данной родительской записи. Например, мне нужны все записи в стране Австралия. В этом случае родительская запись будет

10, COUNTRY, AU, null)

Я понимаю, что рекурсивный CTE - это путь, но не знаю, как это сделать.

спасибо

1 Ответ

2 голосов
/ 30 июля 2011

Вот пример подхода CTE:

declare @t table (id int, type varchar(10), name varchar(50), parentid int)
insert @t
          select 1, 'COUNTRY', 'AU', null
union all select 2, 'STATE', 'Guiness State', 1
union all select 3, 'STATE', 'Pilsner State', 1
union all select 4, 'REGION', 'Heineken Region', 2
union all select 5, 'REGION', 'Bud Light Region', 3
union all select 6, 'TOWN', 'Hoegaarden  Town', 2
union all select 7, 'TOWN', 'Corona Town', 2
union all select 8, 'TOWN', 'Leffe Town', 3

; with  recursed as
        (
        select  *
        from    @t as root
        where   root.name = 'Guiness State'
        union all
        select  child.*
        from    recursed as parent
        join    @t as child
        on      parent.id = child.parentid
        )
select  *
from    recursed

Пример кода в SE Data.

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