2013-05-29 130 views
3

我試圖返回一個表中使用嵌套集模型表示的層次結構中的節點深度, 「M下面這個教程,但在部分使用的查詢‘查找節點的深度’對我不起作用:http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/列在選擇列表中無效,因爲它不包含在聚合函數或GROUP 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 
ORDER BY node.LeftID; 

運行此查詢我得到的錯誤「列‘CompanyGroup.GroupName’是無效,因爲它不包含在聚合函數或GROUP BY子句中。

任何人都可以解釋爲什麼請嗎?

編輯:在錯誤信息錯誤的列,我道歉的錯誤是: 「列 」CompanyGroup.LeftID「 是無效的......

+0

您是否搜索過此錯誤? – Kermit

+0

這是您正在運行的確切查詢嗎? – SWeko

回答

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 
+0

工作,謝謝。出於興趣,你能解釋這個問題嗎? – Jimmy

+0

@JimBarton你研究過你收到的錯誤嗎? – Kermit

+1

@Jim Barton,當您使用group by時,select/order子句中的每一列必須通過集合函數(如MAX,MIN,AVG等)定義,或者必須包含在group by子句中。 – Devart

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 
; 
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並再次運行它。

相關問題