它看起来像你的CTE是错的 - 你几乎没有,但递归成员定义位看起来是错误的。
尝试:
SELECT * FROM pg_Pages;
WITH RecursiveTable (PageId, PageInheritance, Level)
AS
(
--Anchor
SELECT tt.PageId, tt.PageInheritance, 0 AS Level
FROM pg_Pages AS tt
WHERE PageInheritance = 0
UNION ALL
--Recursive member definition
SELECT tt.PageId, tt.PageInheritance, Level + 1
FROM pg_Pages AS tt
INNER JOIN RecursiveTable rt ON
tt.PageInheritance = rt.PageId
)
SELECT *
FROM RecursiveTable
--SELECT * FROM RecursiveTable WHERE Level = 0
在原来的尝试,你的pg_Pages别名需要是TT(你需要前缀TT PageInheritance太)。
否则,它看起来很好。
编辑
为了您更多的问题,你可以添加额外的列:
SELECT * FROM pg_Pages;
WITH RecursiveTable (PageId, PageName, PageInternalLink, PageInternalLinkUrl, PageInheritance, Level)
AS
(
--Anchor
SELECT tt.PageId, tt.PageName, tt.PageInternalLink, tt.PageInternalLinkUrl, tt.PageInheritance, 0 AS Level
FROM pg_Pages AS tt
WHERE PageInheritance = 0
UNION ALL
--Recursive member definition
SELECT tt.PageId, tt.PageName, tt.PageInternalLink, tt.PageInternalLinkUrl, tt.PageInheritance, Level + 1
FROM pg_Pages AS tt
INNER JOIN RecursiveTable rt ON
tt.PageInheritance = rt.PageId
)
SELECT *
FROM RecursiveTable
--SELECT * FROM RecursiveTable WHERE Level = 0
进一步编辑:
好吧,做你想做什么,你可以把查询各地;只要你知道的页面ID:
DECLARE @PageId int
SET @PageId = 39;
WITH RecursiveTable (PageId, PageName, PageInternalLink, PageInternalLinkUrl, PageInheritance, Level)
AS(
--Anchor
SELECT tt.PageId, tt.PageName, tt.PageInternalLink, tt.PageInternalLinkUrl, tt.PageInheritance, 0 AS Level
FROM TestPage AS tt
WHERE PageId = @PageId
UNION ALL
--Recursion
SELECT tt.PageId, tt.PageName, tt.PageInternalLink, tt.PageInternalLinkUrl, tt.PageInheritance, Level + 1
FROM TestPage AS tt
INNER JOIN RecursiveTable rt ON rt.PageInheritance = tt.PageId
)
SELECT * FROM RecursiveTable ORDER BY Level DESC
我们在这里做的是在你的页面开始,然后通过该表向后工作,寻找所有的父母。在这种情况下,最高级别的记录是最终的父级,所以我们按降序排列以反映这一点。
你可以张贴到目前为止你已经尝试过的一个例子吗? – 2012-04-18 08:02:56
现在我正在尝试使用CTE创建PageName和Page URl,如果它能工作,我只是测试它,然后我可以循环访问数据集并实用地创建列表(ul)的面包屑。 – Learning 2012-04-18 08:09:40
我想要一个查询,它可以通过数据库循环,并根据页面传递给它的页面进行循环,我将传递给查询。简单的sql查询或者获取所有数据,但不能以分层的方式 – Learning 2012-04-18 08:12:42