我有一個表,從中我創建一個具有多個級別和父母的樹。表結構看起來像這樣。刪除SQL表中的所有子行由parentid
當我刪除「TitleID」,我希望所有的孩子,甚至孫子被刪除。 什麼是在sql中這樣做的最簡單的方法。 如果我簡單地刪除「Where ParentID = TitleID」,則只刪除具有級別1深度的子級。
我有一個表,從中我創建一個具有多個級別和父母的樹。表結構看起來像這樣。刪除SQL表中的所有子行由parentid
當我刪除「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
值。那麼,如果您要刪除節點1.1
及其子節點,則需要的僅是一個簡單的where子句WHERE FullID LIKE '1.1.%'
。
FullID
的值可以由存儲過程(對於舊數據)生成,或者由應用程序(對於新數據)生成。
這是高度數據庫特定的。 SQL只是一個由多個RDBMS使用的語言'。你在用哪個? MySQL的?甲骨文? SQL Server? ...?您應該始終用相關的RDBMS標記問題,否則大多數答案都是無關緊要的。 – Ben
@我使用SQL Server – Paras