我有一个表,我从中创建了一个具有多个级别和父级的树。表结构如下所示。
当我删除“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.%'
然后,如果您想删除节点1.1
及其子节点,您需要的只是一个简单的 where 子句。
的值FullID
可以由存储过程(针对旧数据)生成,或者更好地由您的应用程序生成(针对新数据)。