【问题标题】:nested set db2 retrieve single path嵌套集 db2 检索单个路径
【发布时间】:2013-07-08 14:57:51
【问题描述】:

我习惯于在 mysql 中使用嵌套集并检索单个路径,我通常会使用以下内容:

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 列表中的深度或表达式无效。 错误代码:-122

如何从 db2 返回嵌套的设置路径?

【问题讨论】:

    标签: db2 nested-sets


    【解决方案1】:

    在最后一个group by中,尝试使用

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

    【讨论】:

    • 我是这么认为的。我很好奇当你删除有子句时会发生什么,你会得到相同的语法错误吗?
    • 是的,我刚刚尝试过,但删除了having子句后出现了同样的错误。
    猜你喜欢
    • 1970-01-01
    • 2015-06-16
    • 1970-01-01
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    • 2020-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多