分层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列。

+0

宾果!递归部分对CTE的引用在我看到的例子中并不明显,在翻译到我的表格时丢失了。我知道在没有定义它的情况下引用级别感觉不对,现在我知道为什么。感谢您及时的回复。 – gfrizzle 2010-05-19 20:55:48

您的查询不是递归的 - 您必须从递归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