我试图返回一个表格,其中包含使用嵌套集合模型表示的层次结构中的节点深度,我遵循本教程,但查询中使用的查询'查找节点的深度'对我不起作用:http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/
SELECT node.GroupName, (COUNT(parent.GroupName) - 1) AS depth
FROM CompanyGroup AS node,
CompanyGroup AS parent
WHERE node.LeftID BETWEEN parent.LeftID AND parent.RightID
GROUP BY node.GroupName
ORDER BY node.LeftID;
运行此查询我收到错误" Column' CompanyGroup.GroupName'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。"
有人可以解释为什么吗?
编辑:错误消息中的列错误,我的道歉错误是:" Column" CompanyGroup.LeftID"无效...... "
答案 0 :(得分:5)
试试这个 -
SELECT
node.GroupName
, depth = COUNT(parent.GroupName) - 1
FROM CompanyGroup node
JOIN CompanyGroup parent ON node.LeftID BETWEEN parent.LeftID AND parent.RightID
GROUP BY node.GroupName
ORDER BY MIN(node.LeftID) --<--
或试试这个 -
SELECT
node.GroupName
, depth = COUNT(parent.GroupName) - 1
FROM CompanyGroup node
JOIN CompanyGroup parent ON node.LeftID BETWEEN parent.LeftID AND parent.RightID
GROUP BY node.GroupName, node.LeftID
ORDER BY node.LeftID
答案 1 :(得分:2)
您是否正在运行其他查询?您不应该收到该特定错误,而是"Column "CompanyGroup.LeftID" is invalid in the ORDER BY..."
此查询应该有效:
SELECT node.GroupName, (COUNT(parent.GroupName) - 1) AS depth
FROM CompanyGroup AS node,
CompanyGroup AS parent
WHERE node.LeftID BETWEEN parent.LeftID AND parent.RightID
GROUP BY node.GroupName
;
答案 2 :(得分:0)
我不认为这是你从你发布的查询中收到的错误 - 你确定你没有弄乱它吗?
无论如何,这里还有其他问题:你正在使用node.LeftID
订购结果,但是你不能这样做。您应该收到此消息:
Column "node.LeftID" is invalid in the ORDER BY clause because it is not contained in either an aggregate function or the GROUP BY clause.
尝试删除ORDER BY并再次运行。