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 join to get the cartesian product of 2 columns
- sql execution latency when assign to a variable
- Difference between Types.INTEGER and Types.NULL in
- php PDO::FETCH_ASSOC doesnt detect select after ba
- Bulk update SQL Server C#
sql递归
递归删除吧
在不产生垃圾数据前提下删除的逻辑是:1.删除子表 2.通过主外键关系删除父表。如果从表数据未删除时,正常情况下删除主表数据是不允许的。
如果不想改表結構,那就写个递归代码呗。
如果不想写递归代码,或者不会写,那就找别人帮忙写呗。
有个思路,PARENT_ID创建一个外键,这个外键指向表的ID,并且设置外键的策略,我记得有一个策略是级联。
这个问题换个思路其实好办。
思路1:递归遍历 但是效率低
思路2:记录节点的全路径
如下设计:
这样删除的时候就可以 通过路径匹配删除父节点下的所有节点,效率也高。(http://www.52interview.com/ (_)