SQL递归CTE查询错误';列名无效-级别为';
尝试编写递归CTE查询时,不断出现以下错误:SQL递归CTE查询错误';列名无效-级别为';,sql,sql-server-2005,common-table-expression,Sql,Sql Server 2005,Common Table Expression,尝试编写递归CTE查询时,不断出现以下错误:level,列名无效 这就是问题所在,我错在哪里 WITH OwnerHierarchy AS ( SELECT PairID, ChildID, ParentID, 0 AS level FROM BusinessHierarchy UNION ALL SELECT e.PairID, e.ChildID, e.P
level,列名无效
这就是问题所在,我错在哪里
WITH OwnerHierarchy AS (
SELECT PairID,
ChildID,
ParentID,
0 AS level
FROM BusinessHierarchy
UNION ALL
SELECT e.PairID,
e.ChildID,
e.ParentID,
level + 1 AS level
FROM BusinessHierarchy AS e
JOIN BusinessHierarchy AS eh ON e.ParentID = eh.ParentID)
SELECT PairID,
ChildID,
ParentID,
level
FROM OwnerHierarchy AS OwnerHierarchy_1
ORDER BY level, ChildID, ParentID
这是ms sql server 2005。您需要在CTE的下半部分的某个地方进行递归。相反,您有两次
BusinessHierarchy
。只是猜测确切的需求,但类似于此
WITH OwnerHierarchy(PairID, ChildID, ParentID, level)
AS
(
SELECT PairID, ChildID, ParentID, 0 AS level
FROM BusinessHierarchy
WHERE ParentID IS NULL
UNION ALL
SELECT e.PairID, e.ChildID, e.ParentID, level + 1 AS level
FROM BusinessHierarchy AS e
INNER JOIN OwnerHierarchy AS eh
ON e.ParentID = eh. ChildID
)
SELECT PairID, ChildID, ParentID, level
FROM OwnerHierarchy AS OwnerHierarchy_1
ORDER BY level, ChildID, ParentID
您发布的内容有三个问题:
WITH OwnerHierarchy AS (
SELECT a.pairid,
a.childid,
a.parentid,
0 AS level
FROM BusinessHierarchy a
WHERE a.parentid IS NULL -- Point #1, see below
UNION ALL
SELECT b.PairID,
b.ChildID,
b.ParentID,
oh.level + 1 AS level
FROM BusinessHierarchy AS b
JOIN OwnerHierarchy oh ON oh.childid = b.parentid) -- Points #2 & 3, see below
SELECT x.PairID,
x.ChildID,
x.ParentID,
x.level
FROM OwnerHierarchy x
ORDER BY x.level, x.ChildID, x.ParentID
要点:
BusinessHierarchy
加入自身用作
,只是该部分的风格问题
结论
我认为表别名将处理
级别
列未找到的问题,但不是100%。我尝试了几种不同的方法,要么没有结果(数据库中有几个测试用例),要么visual studio崩溃!好的,请注意,我们有两个不同版本的MS SQL,测试环境当然不支持公共表!然而,它没有返回任何数据集,这很奇怪,因为我知道至少有几个测试用例应该返回!我错过了一些东西,因为我没有得到任何结果。如果我运行查询的第一部分,除非删除:WHERE a.parentid为NULL行,否则什么也得不到,但是当我运行整个查询时删除了这一行,那么我的IDE就会崩溃。老实说,我不是真的了解所有的CTE方面,但我想它是越来越好,我看得越多。谢谢,我发现了错误是什么,太棒了。这帮了大忙,所以谢谢。我投了票,我确信:)谢谢。很抱歉,我之前没有回复,有医生的事情要处理,但很高兴看到你能解决。