2013-07-08 51 views
0

我已經習慣了使用嵌套組在mysql和檢索我通常會使用以下的單一路徑:嵌套組DB2檢索單一路徑

SELECT node.treeID, 
     node.name, 
     node.lft, 
     node.rgt, 
     (COUNT(parent.name) - (sub_tree.depth + 1)) AS depth 
FROM docsTree AS node, 
    docsTree AS parent, 
    docsTree AS sub_parent, 

    (SELECT node.name, 
      (COUNT(parent.name) - 1) AS depth 
    FROM docsTree AS node, 
     docsTree AS parent 
    WHERE node.lft BETWEEN parent.lft AND parent.rgt 
    AND node.treeID = :requestedNode 
    GROUP BY node.treeID, 
      node.name, 
      node.lft, 
      node.rgt 
    ORDER BY node.lft)AS sub_tree 
WHERE node.lft BETWEEN parent.lft AND parent.rgt 
    AND node.lft BETWEEN sub_parent.lft AND sub_parent.rgt 
    AND sub_parent.name = sub_tree.name 
GROUP BY node.treeID, 
     node.name, 
     node.lft, 
     node.rgt HAVING depth = 1 
ORDER BY node.lft 

現在我有一個需要做DB2中的相同但上面的查詢給我以下錯誤:

錯誤:SELECT或HAVING子句中的列引用無效, ,因爲它不是分組列;或GROUP BY子句中的列引用 無效。

[SQL0122]列 SELECT列表中的DEPTH或表達式無效。 錯誤代碼:-122

如何從db2返回嵌套的設置路徑?

回答

0

在最後一組的,請嘗試使用

GROUP BY node.treeID, 
    node.name, 
    node.lft, 
    node.rgt HAVING (COUNT(parent.name) - (sub_tree.depth + 1)) = 1 
+0

我與修改後的集團同樣的錯誤BY – Early73

+0

我是這麼認爲的。我很好奇當你刪除having子句時會發生什麼,你會得到相同的語法錯誤嗎? – dougEfresh

+0

是的,我剛剛嘗試過,並且刪除了having子句時出現同樣的錯誤。 – Early73