2012-06-05 3 views
1

У меня есть таблица, из которой я создаю дерево с несколькими уровнями и родителями. Структура таблицы выглядит так.удалить все дочерние строки в таблице sql parentid

enter image description here

Когда я удалить «TitleID», я хочу, чтобы все дети и даже внуки, которые будут удалены. Что такое самый простой способ сделать это в sql. Если я просто удалю с «where ParentID = TitleID», удаляются только дети с глубиной 1-го уровня.

+1

Это очень специфичная база данных. SQL - это просто язык, который используется несколькими RDBMS. Что вы используете? MySQL? Oracle? SQL Server? ...? Вы всегда должны тегировать вопросы с соответствующей РСУБД, в противном случае большинство ответов будут неактуальны. – Ben

+0

@Ben i m с использованием 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. Тогда вам нужно просто просто, где статья WHERE FullID LIKE '1.1.%', если вы хотите удалить узел 1.1, и это дети.

Значение FullID может быть сгенерировано хранимой процедурой (для старых данных) или лучше вашим приложением (для новых данных).