SQL Server: получить все родительские дочерние URL-адреса из одной таблицы - PullRequest
3 голосов
/ 28 сентября 2010

У меня есть таблица, которая выглядит так:

Slug | Parent | MetaTitle | MetaDescription | MetaKeywords

URL-адреса на сайте создаются путем добавления слагаемого к родителю, если родитель не равен нулю. Так что, если у меня есть данные, такие как:

Slug            | Parent
-----------------------------------------
Home              null
About             null
Our-Company       About
Our-History       Our-Company

Я надеюсь, что смогу выполнить запрос, который бы получил меня

/Home
/About
/About/Our-Company
/About/Our-Company/Our-History

Возможно ли это? Любая помощь будет великолепна !!!

1 Ответ

4 голосов
/ 28 сентября 2010

Возможно использование рекурсивного CTE :

declare @URLTable table (
 Slug varchar(50),
 Parent varchar(50)
)

insert into @URLTable
 (Slug, Parent)
 values
 ('Home', null),
 ('About', null),
 ('Our-Company', 'About'),
 ('Our-History', 'Our-Company')


;with cteURLs as (
 select Slug, cast('/' + Slug as varchar(1000)) as URL
     from @URLTable
     where Parent is null
 union all
 select u.Slug, cast(c.URL + '/' + u.Slug as varchar(1000)) as URL
     from @URLTable u
         inner join cteURLs c
             on u.Parent = c.Slug
)
select URL from cteURLs

Выход:

URL
-----------------
/Home
/About
/About/Our-Company
/About/Our-Company/Our-History
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...