首页 新闻 搜索 专区 学院

sql语句如何删除父级连带的所有子级

0
悬赏园豆:10 [已解决问题] 解决于 2020-06-08 15:32

sqlsever数据库表中数据如下:
编码 名称 父级编码
aa 测试1 0
zg 测试5 aa
bb 测试2 aa
cc 测试3 bb
dd 测试4 cc

数据库表中数据aa是根节点、父级,有两个子级zg、bb;子级bb又有子级cc和子级cc的子级dd
若删除根节点aa,除了删除zg、bb外,如何删除bb下面的cc、dd;或删除子级bb时,如何删除cc、dd

sql
小白学无止境的主页 小白学无止境 | 初学一级 | 园豆:8
提问于:2020-05-15 16:10
< >
分享
最佳答案
0

递归删除吧

收获园豆:8
会长 | 大侠五级 |园豆:9004 | 2020-05-15 17:47
其他回答(6)
0

 有个思路,PARENT_ID创建一个外键,这个外键指向表的ID,并且设置外键的策略,我记得有一个策略是级联。

收获园豆:2
renguanyu | 园豆:541 (小虾三级) | 2020-05-15 16:32

如果这样的话就要更改表结构了。。。

支持(0) 反对(0) 小白学无止境 | 园豆:8 (初学一级) | 2020-05-15 16:43

@小白学无止境: 严格来说不算修改,只是在原有的基础上新增

支持(0) 反对(0) renguanyu | 园豆:541 (小虾三级) | 2020-05-15 21:07
0

如果不想改表結構,那就写个递归代码呗。
如果不想写递归代码,或者不会写,那就找别人帮忙写呗。

爱编程的大叔 | 园豆:30686 (高人七级) | 2020-05-15 17:33
0

sql递归

不知道风往哪儿吹 | 园豆:731 (小虾三级) | 2020-05-16 16:48
0

在不产生垃圾数据前提下删除的逻辑是:1.删除子表 2.通过主外键关系删除父表。如果从表数据未删除时,正常情况下删除主表数据是不允许的。

心怀宇宙 | 园豆:637 (小虾三级) | 2020-05-18 14:01
0

这个问题换个思路其实好办。

思路1:递归遍历 但是效率低
思路2:记录节点的全路径

如下设计:

这样删除的时候就可以 通过路径匹配删除父节点下的所有节点,效率也高。(http://www.52interview.com/ (_)

戎"码"一生 | 园豆:182 (初学一级) | 2020-05-19 21:32
0

我在设计程序的时候,所有的pid都不会采用自带的id自增,类似这种,我会使用 where 1%来删除,如
编码 名称 父级编码
1 测试1 0
11 测试5 1
12 测试2 1
121测试3 12
1211 测试4 121

那么在查询的时候如果删除所有1的那么 where1% 如果是删除11% 121%类似,这属于很简单的老生常谈的数据权限问题

Best_Hong | 园豆:206 (菜鸟二级) | 2020-06-09 15:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册