用javascript生成了一棵树,如何删除上级节点的时候把下级所有节点的内容全部删除

时间:2022-08-26 20:50:16
js检索数据库动态生成的一棵树.可以点击右键进行增删改查操作.
当点击父节点选择右键删除的时候,想从数据库中删除该节点下所有的子节点内容.
问题是:点击右键可以无限的增加下级节点.假设在某个节点上点右键,选择删除.可以通过js得到
该节点的主键.此时该节点下若有N个子节点.如何写sql语句进行删除?
oracle数据库的设计字段:type_id(primaryKey varchar50)UUID动态生成. 
type_name(varchar200)
parent_id(varchar 50)(记录相应父节点的type_id).
问题出来了:删除父节点用delete from table where type_id = "当前节点的type_id";
获取第一子节点所有主键用select type_id from table where parent_id = "父节点的type_id";
然后一一删除.
获取第二节点呢,第三节点呢.第N节点呢..
没思路了.希望高手能给个思路.小弟十分感谢.

6 个解决方案

#1


delete from table1 a
where type_id in
(select type_id from table1
  start with type_id=:id --父节点id
  connect by prior type_id=parent_id)

#2


引用 1 楼 wildwave 的回复:
delete from table1 a
where type_id in
(select type_id from table1
  start with type_id=:id --父节点id
  connect by prior type_id=parent_id)

我数据库学的不好.能给我解释下.start with 后面几句话的作用么.谢谢

#3


...
看看这个,讲得比较详细
http://762626559-qq-com.javaeye.com/blog/382983

#4


引用 3 楼 wildwave 的回复:
...
看看这个,讲得比较详细
http://762626559-qq-com.javaeye.com/blog/382983

恩,明白了.很感谢.

#5


引用 2 楼 zhiyexiaocai 的回复:
引用 1 楼 wildwave 的回复:
delete from table1 a
where type_id in
(select type_id from table1
  start with type_id=:id --父节点id
  connect by prior type_id=parent_id)

我数据库学的不好.能给我解释下.start with 后面几句话的作用么.谢谢

这里做了一个递归,是递归就要有递归的开始点和结束点,
开始点在这个start with里设定,结束点不设定表示一直递归到最后。

#6


谢谢五楼的解答.已经明白了.很感谢各位.

#1


delete from table1 a
where type_id in
(select type_id from table1
  start with type_id=:id --父节点id
  connect by prior type_id=parent_id)

#2


引用 1 楼 wildwave 的回复:
delete from table1 a
where type_id in
(select type_id from table1
  start with type_id=:id --父节点id
  connect by prior type_id=parent_id)

我数据库学的不好.能给我解释下.start with 后面几句话的作用么.谢谢

#3


...
看看这个,讲得比较详细
http://762626559-qq-com.javaeye.com/blog/382983

#4


引用 3 楼 wildwave 的回复:
...
看看这个,讲得比较详细
http://762626559-qq-com.javaeye.com/blog/382983

恩,明白了.很感谢.

#5


引用 2 楼 zhiyexiaocai 的回复:
引用 1 楼 wildwave 的回复:
delete from table1 a
where type_id in
(select type_id from table1
  start with type_id=:id --父节点id
  connect by prior type_id=parent_id)

我数据库学的不好.能给我解释下.start with 后面几句话的作用么.谢谢

这里做了一个递归,是递归就要有递归的开始点和结束点,
开始点在这个start with里设定,结束点不设定表示一直递归到最后。

#6


谢谢五楼的解答.已经明白了.很感谢各位.