分层SQL查询没有返回
问题描述:
水平
我有一个典型的SQL Server分级查询:分层SQL查询没有返回
WITH bhp AS (
SELECT name, 0 AS level
FROM dbo.BhpNode
WHERE parent_id IS NULL
UNION ALL
SELECT a.name, level + 1
FROM dbo.BhpNode a
INNER JOIN dbo.BhpNode b
ON b.bhp_node_id = a.parent_id)
SELECT * FROM bhp
这似乎符合我的网络上发现的分层查询的各种例子,但由于某种原因它的产区这个错误:
Msg 207, Level 16, State 1, Line 12
Invalid column name 'level'.
我确定我错过了一些明显的东西,但我盯着它看了太久。任何想法,我要去哪里错了?
答
在CTE的递归部分中,您引用的其中一个表格应该是CTE本身,不是吗?目前,您只是自己加入BhpNode
,并且它本身没有level
列。
答
您的查询不是递归的 - 您必须从递归CTE的第二部分中的bhp
中进行选择。试试这个:
WITH bhp AS (
SELECT *, 0 AS [level]
FROM dbo.BhpNode
WHERE parent_id IS NULL
UNION ALL
SELECT b.*, [level] + 1
FROM bhp a
INNER JOIN dbo.BhpNode b
ON a.bhp_node_id = b.parent_id)
SELECT * FROM bhp
宾果!递归部分对CTE的引用在我看到的例子中并不明显,在翻译到我的表格时丢失了。我知道在没有定义它的情况下引用级别感觉不对,现在我知道为什么。感谢您及时的回复。 – gfrizzle 2010-05-19 20:55:48