0

こんにちは、SQL データベースにツリー構造を作成したいと考えています。次のプロパティが必要です。

  • 高速選択
  • Cat2/Cat4 のような文字列だけで簡単に選択 -> Cat5 & Cat6 を返す
  • 仮想カテゴリのサポート
  • Insert は簡単なはずですが、高速な Select に比べれば重要ではありません
  • 挿入と同じように削除します。簡単なのはいいことですが、選択をすばやくできることが重要
  • 並べ替えは選択ほど重要ではありません

代替テキスト

私はMaterialized-PathとhierarchyIdを見てきましたが、ほとんどの例ではAdventureWorksのようなサンプルを使用していますが、それは私のニーズには複雑すぎる.

記録のために、私はSql Server 2008 R2とC# 4.0を使用しています

4

2 に答える 2

1

SQL Server は再帰的な CTEをサポートしています。おそらく役に立ちます。

次の SQL を使用して、データからツリー構造を構築できます。

WITH cat_tree AS (
  SELECT cat_id, cat_name, parent_id,
         0 AS level, CAST('0' AS varchar(90)) AS path
    FROM cats
   WHERE parent_id IS NULL
  UNION ALL
  SELECT c.cat_id, c.cat_name, c.parent_id,
      ct.level + 1,
      CAST(ct.path+'.'+CAST(
       (row_number() OVER (ORDER BY ct.cat_id)) AS varchar) AS varchar(90))
    FROM cats c
    JOIN cat_tree ct ON c.parent_id = ct.cat_id)
SELECT * FROM cat_tree
 ORDER BY path;

SQL Fiddleの結果を見てください。

于 2012-05-20T22:51:20.693 に答える
0

ネストされたセットを見てみましょう。ジョー・セルコを参照してください。

于 2012-05-20T22:21:23.650 に答える