0
我有這張帶有頁面的表格,這些頁面的父母也是同一張表格中的頁面。一對多加入同一張桌子上的3個級別
對於這個例子起見,表如下所示:
table: Pages
PageId :Key
PageParent :Foreign Key
PageName
現在我的問題是什麼將在SQL樣子創建menustructure時,如:
PageId PageParent PageName
1 NULL home
2 1 page_under_home1
5 2 page_under_pageid2_1
6 2 page_under_pageid2_2
4 1 page_under_home2
5 4 page_under_pageid4_1
7 5 page_under_pageid5_1
6 4 page_under_pageid4_2
9 6 page_under_pageid6_1
10 6 page_under_pageid6_2
8 1 page_under_home3
11 1 page_under_home4
12 11 page_under_pageid11_1
13 12 page_under_pageid12_1
目前,我有這樣的:
SELECT p1.PageId, p1.PageName, p1.PageParent, p2.PageName AS Expr1
FROM dbo.pages AS p1 FULL OUTER JOIN
(SELECT PageId, PageName
FROM dbo.pages
WHERE (PageParent IS NULL)) AS p2 ON p2.PageId = p1.PageParent
但這幾乎不會創建我想要的輸出,我想我會去compl etely走錯了路......
編輯:
這是我目前有:
WITH
PagesMenu(pageId, PageParent, PageName)
AS
(
SELECT
PageId, PageParent, PageName
FROM
dbo.pages
WHERE
(PageParent IS NULL)
AND
(PageIsVisible = 'True')
UNION ALL
SELECT
b.PageId, b.PageParent, b.PageName
FROM
PagesMenu AS a
INNER JOIN
dbo.pages AS b
ON
a.pageId = b.PageParent
)
SELECT pageId, PageParent, PageName
FROM PagesMenu
而且似乎在一定程度上工作,但不能完全重現,第一遞歸似乎工作但它看起來並不是第二次。
結果:
pageId PageParent PageName
3 NULL home
1 3 test
4 3 test
5 4 test
6 4 test
7 4 test
8 5 test <---wrong
2 1 test <---wrong
您需要使用遞歸查詢。您使用哪種SQL語言? – 2010-07-23 08:02:07
我正在使用MS SQL server for – 2010-07-23 08:06:13
什麼版本?從2005年開始,您可以使用CTE來幫助解決這個問題。 – spinon 2010-07-23 08:20:52