我有一个典型的SQL Server分层查询:
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
列名称“级别”无效。
我确定我错过了一些明显的东西,但我已经盯着它看了太长时间。知道我哪里错了吗?
答案 0 :(得分:3)
您的查询不是递归的 - 您必须在递归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
答案 1 :(得分:1)
在CTE的递归部分,您引用的其中一个表应该是CTE本身,不应该吗?目前您只是自我加入BhpNode
,而且本身没有level
列。