[英]SQL recursive CTE query error 'invalid column name - level'
嘗試編寫遞歸CTE查詢時,始終出現以下錯誤: level, invalid column name
這是查詢,我哪里出錯了?
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。
您發布的內容存在三個問題:
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
加入自身時,引用應為CTE名稱 有關使用表別名的道具,但並沒有得到一致使用,因此應盡可能簡短。 定義它們時不需要使用AS
,這只是樣式方面的問題。
我認為表別名將處理level
列未找到的問題,但不是100%。
您需要在CTE下半年的某個地方OwnerHierarchy
才能遞歸。 相反,您有兩次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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.