2013-07-08 49 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