У меня есть таблица, какЕсть ли лучший способ построить этот запрос?
CommentPaths
============================
ancestor_id | descendant_id
============================
1 1
1 2
1 3
1 4
1 5
1 6
1 7
2 2
2 4
2 5
4 4
5 5
3 3
3 6
3 7
6 6
7 7
предназначенный для представления структуры дерева как
1
/ \
2 3
/\ \
4 5 6
/
7
Предположим, что я удалить 2
. Затем мне нужно удалить записи, указанные ниже.
CommentPaths
============================
ancestor_id | descendant_id
============================
1 1
1 2 <-------------
1 3
1 4
1 5
1 6
1 7
2 2 <-------------
2 4 <-------------
2 5 <-------------
4 4 <-------------
5 5 <-------------
3 3
3 6
3 7
6 6
7 7
Другими словами, при удалении k
из дерева мне нужно
- Удалить все строки, в которых
ancestor_id
равноk
- Удалить все строки, где
descendant_id
равняется тамancestor_id
это один из тех, от 1.
Так что мой запрос будет выглядеть как-то например
SELECT descendant_id FROM CommentPaths WHERE ancestor_id=2 AS descs
DELETE FROM CommentPaths WHERE ancestor_id IN descs
DELETE FROM CommentPaths WHERE descendant_id IN descs
или есть более удобный, более компактный способ сделать это ????
Почему все свое потомство? –
Имеет ли ancestor_id = descendant_id? – openwonk
@KoebmandSTO Вот так оно представлено на стр. 36 этой книги. Я читаю https://pragprog.com/book/bksqla/sql-antipatterns. Я тоже никогда не понимал, почему. – user5648283