Есть например запись в таблице, на эту запись ссылаются другие записи из этой же таблицы и т.д. для каждой ссылающейся записи.
Так вот в чем вопрос. Как удалеть все записи, начиная с самой глубоко вложенной?
Это дело хочется организовать в виде процедуры в firebird
Каскадное удаление не было предусмотрено. Отпадает
1. SAD - 17 Октября, 2011 - 17:50:07 - перейти к сообщению
2. Champion - 17 Октября, 2011 - 18:58:09 - перейти к сообщению
SAD пишет:
Т.е. двигаться наверх к корню? Тогда что делать с ветками дерева, которые растут из удаляющихся вершин? Или все-таки начинать надо от заданной и удалять все ее поддеревья?начиная с самой глубоко вложенной?
(Добавление)
Если всё же удалять надо от вершины вниз, то можно так:
CODE (SQL):
скопировать код в буфер обмена
скопировать код в буфер обмена
- WITH del_ids AS (
- SELECT id
- FROM tbl WHERE id = :del_id
- UNION ALL
- SELECT t.id
- FROM tbl t
- JOIN del_ids d ON t.parent_id = d.id
- )
- DELETE FROM tbl WHERE id IN (SELECT id FROM del_ids)
(Добавление)
Соответсвенно :del_id - с этой айдишки начинаем удалять
(Добавление)
CTE появились в FB с версии 2.1. На 2.0 так не получится. Будем надеяться, что у вас там 2.1 стоит или 2.5 даже)