2012-06-05 27 views
1

我有一個表,從中我創建一個具有多個級別和父母的樹。表結構看起來像這樣。刪除SQL表中的所有子行由parentid

enter image description here

當我刪除「TitleID」,我希望所有的孩子,甚至孫子被刪除。 什麼是在sql中這樣做的最簡單的方法。 如果我簡單地刪除「Where ParentID = TitleID」,則只刪除具有級別1深度的子級。

+1

這是高度數據庫特定的。 SQL只是一個由多個RDBMS使用的語言'。你在用哪個? MySQL的?甲骨文? SQL Server? ...?您應該始終用相關的RDBMS標記問題,否則大多數答案都是無關緊要的。 – Ben

+0

@我使用SQL Server – Paras

回答

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) 
1

爲了處理關係數據庫樹結構化的數據,你可以添加另一列FullID,包含了像1.1.3值。那麼,如果您要刪除節點1.1及其子節點,則需要的僅是一個簡單的where子句WHERE FullID LIKE '1.1.%'

FullID的值可以由存儲過程(對於舊數據)生成,或者由應用程序(對於新數據)生成。