1

複数のレベルと親を持つツリーを作成するテーブルがあります。テーブル構造はこんな感じ。

ここに画像の説明を入力

「TitleID」を削除すると、すべての子、さらには孫も削除されます。SQLでこれを行う最も簡単な方法は何ですか。「where ParentID=TitleID」で単純に削除すると、レベル 1 の深さの子のみが削除されます。

4

2 に答える 2

5
DECLARE @TitleId INT 

SELECT @@TitleId = 2 

;WITH results AS( 
        SELECT  TitleId
        FROM    myTable 
        WHERE   TitleId = @TitleId 
        UNION ALL 
        SELECT  t.TitleId 
        FROM    myTable t 
                INNER JOIN ret r ON t.ParentID = r.TitleId
) 

DELETE FROM myTable WHERE TitleId IN (SELECT TitleId FROM    results )
于 2012-06-05T10:21:39.740 に答える
1

リレーショナル データベースでツリー構造のデータを処理するには、 のFullIDような値を含む別の列を追加できます1.1.3。次に、ノードとその子WHERE FullID LIKE '1.1.%'を削除する場合に必要なのは、単純な where 句だけです。1.1

の値はFullID、ストアド プロシージャによって (古いデータの場合)、またはアプリケーションによって (新しいデータの場合) 生成できます。

于 2012-06-05T10:34:57.887 に答える