Você só precisa garantir que configurou uma chave estrangeira da linha filho para seu pai, com o
ON DELETE CASCASDE
opção definida na chave estrangeira. Isso funciona tão bem para uma tabela de auto-referência quanto para referências em tabelas separadas. Para excluir a árvore, basta excluir o nó pai. Todas as linhas filhas serão excluídas sumariamente. por exemplo. Dado:
CREATE TABLE MyTable
(
ID INT NOT NULL PRIMARY KEY,
ParentID INT NULL,
CONSTRAINT FK_MT_Parent FOREIGN KEY (ParentID) REFERENCES MyTable(ID) ON DELETE CASCADE
);
-- And inserting two trees of data:
-- 1-2-3
-- └-4
-- 10 - 11
INSERT INTO MyTable(ID,ParentID) VALUES
(1,null), (2,1), (3,2), (4,2),
(10,null), (11,10);
Podemos remover toda a primeira árvore simplesmente excluindo o nó raiz:
DELETE FROM MYTable WHERE ID = 1;
SqlFiddle do mesmo
Observe, no entanto, que nos Documentos que há um limite para a profundidade de
CASCADE
exclui: