在此先感谢您的帮助。我对MS SQL数据库还是比较陌生的,但是我想知道为什么我下面的MSSQL递归查询没有返回我期望的值。我已经完成了我的研究,最后是我提出的代码。比方说,我有以下表...递归查询SQL Server不按预期工作
CategoryID ParentID SomeName
1 0 hmm
2 0 err
3 0 woo
4 3 ppp
5 4 ttt
我期待下面的查询返回3 4 5我基本上是想获得它下面的类ID的层次结构列表中的自我包容的基础上,分类ID我通过递归查询。感谢您的帮助。
GO
WITH RecursiveQuery (CategoryID)
AS
(
-- Anchor member definition
SELECT a.CategoryID
FROM [SomeDB].[dbo].[SomeTable] AS a
WHERE a.ParentID = CategoryID
UNION ALL
-- Recursive member definition
SELECT b.CategoryID
FROM [SomeDB].[dbo].[SomeTable] AS b
INNER JOIN RecursiveQuery AS d
ON d.CategoryID = b.ParentID
)
-- Statement that executes the CTE
SELECT o.CategoryID
FROM [SomeDB].[dbo].[SomeTable] AS o
INNER JOIN RecursiveQuery AS d
ON d.CategoryID = 3
GO
'WHERE a.ParentID = 0'(第一个选项可能是更好的,如果要创建的某种根鉴于此第二个主要适用) ,'WHERE b.ParentID = d.theID' –
我想最后的选择可能来自'RecursiveQuery'。 'd.theID'不会产生横切值'3',它将成为所有id的列表。所以filter = 3会给你一条记录。 –
正如@IvanStarostin所说,你的锚定成员定义并不是记录。主播应该是一个作为你的出发点的记录。 –