3

ネストされたセット モデルを使用して表された階層内のノードの深さを持つテーブルを返そうとしています。このチュートリアルに従っていますが、「ノードの深さを見つける」セクションで使用されているクエリが機能しません。 : 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;

このクエリを実行すると、「列 'CompanyGroup.GroupName' は、集計関数または GROUP BY 句のいずれにも含まれていないため、選択リストでは無効です。」というエラーが表示されます。

誰でも理由を説明できますか?

編集: エラー メッセージの列が間違っています。申し訳ありませんが、エラーは次のとおりです

4

3 に答える 3

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
于 2013-05-29T12:58:59.917 に答える
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
;
于 2013-05-29T12:59:46.887 に答える
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 を削除して、もう一度実行してみてください。

于 2013-05-29T13:00:13.983 に答える