複数のレベルと親を持つツリーを作成するテーブルがあります。テーブル構造はこんな感じ。
「TitleID」を削除すると、すべての子、さらには孫も削除されます。SQLでこれを行う最も簡単な方法は何ですか。「where ParentID=TitleID」で単純に削除すると、レベル 1 の深さの子のみが削除されます。
複数のレベルと親を持つツリーを作成するテーブルがあります。テーブル構造はこんな感じ。
「TitleID」を削除すると、すべての子、さらには孫も削除されます。SQLでこれを行う最も簡単な方法は何ですか。「where ParentID=TitleID」で単純に削除すると、レベル 1 の深さの子のみが削除されます。
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 )
リレーショナル データベースでツリー構造のデータを処理するには、 のFullID
ような値を含む別の列を追加できます1.1.3
。次に、ノードとその子WHERE FullID LIKE '1.1.%'
を削除する場合に必要なのは、単純な where 句だけです。1.1
の値はFullID
、ストアド プロシージャによって (古いデータの場合)、またはアプリケーションによって (新しいデータの場合) 生成できます。