簡體   English   中英

SQL遞歸CTE查詢錯誤'無效的列名-級別'

[英]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

要點:

  1. UNION的上半部分缺少確定根節點/記錄/行是什么的內容。 我假設,希望正確...
  2. 您將BusinessHierarchy加入自身時,引用應為CTE名稱
  3. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM