【发布时间】:2012-05-20 19:38:00
【问题描述】:
这是 SQL Server 问题
我有一组类别,它们的关系导致嵌套类别。
我想建立一个途径来保持关系并建立 SEF 网址。这是我正在寻找的内容:
Category table:
ID, Name
1, Root
2, Cat1
3, Cat2
4, Cat1.1
5, Cat1.2
6, Cat2.1
7, Cat2,2
CategoryChild table: ParentCategoryID, ChildCategoryID
1, 2
1, 3
2, 4
2, 5
3, 6
3, 7
这是一个无限的嵌套结构。这是我正在做的事情(我知道它错了,但想要这样的东西):
WITH MenuItems
AS (
SELECT
CAST((ItemPath) AS VARCHAR(1000)) AS 'ItemPath',
CategoryID, Category, ChildID
FROM #Mapping
WHERE CategoryID = 1
UNION ALL
SELECT
CAST((items.ItemPath + '-/' + MenuItem.Category) AS VARCHAR(1000)) AS 'ItemPath',
MenuItem.CategoryID, MenuItem.Category, MenuItem.ChildID
FROM #Mapping AS MenuItem
JOIN MenuItems AS items
ON items.ChildID = MenuItem.CategoryID
)
select * from MenuItems
它给了我这样的东西:
根--------|1---|根---|2 根--------|1---|根---|3 根/Cat2---|3---|Cat2---|6 根/Cat2---|3---|Cat2---|7 根/Cat1---|2---|Cat1---|4 根/Cat1---|2---|Cat1---|5所以理想的路径应该是这样的:
根/父/子(等等)!
【问题讨论】:
-
您忘记了 RECURSIVE 关键字?
-
您使用的是什么数据库?如果您使用的是 SQL Server,则需要递归 CTE。如果您使用的是 Oracle,则需要使用路径连接。
标签: sql sql-server recursion