当前位置: 首页 > 面试题库 >

删除SQL表中的层次结构数据

单勇
2023-03-14
问题内容

我有一个包含分层数据的表。
列“ ParentId”保存其父级的ID(“ ID”-关键列)。

删除一行时,我要删除所有子级(所有级别的嵌套)。

怎么做?

谢谢


问题答案:

当行数不太大时,erikkallen的递归方法起作用。

这是使用临时表收集所有子项的替代方法

create table #nodes (id int primary key)
insert into #nodes (id) values (@delete_id)
while @@rowcount > 0
    insert into #nodes 
    select distinct child.id 
    from table child
    inner join #nodes parent on child.parentid = parent.id
    where child.id not in (select id from #nodes)

delete
from table
where id in (select id from #nodes)

它从带有@delete_id的行开始,然后从那里开始。where语句用于防止递归;如果您确定没有任何内容,则可以将其忽略。



 类似资料:
  • 问题内容: 像这样对表格进行排序的最佳方法是什么: 要通过分级排序,它 的ID 或 名字 : “比萨饼” //节点1 “piperoni” //节点1.1 “奶酪” //节点1.2 “额外的奶酪” //节点1.2.1 “vegetariana” //节点1.3 “汉堡” //节点2 ‘咖啡’//节点3 编辑: 名称 末尾的数字是为了更好地可视化strucutre,而不是用于排序。 编辑2: 正如多

  • 问题内容: 该表表示类别层次结构,层次结构顶部的元素的父ID为NULL。该表如下所示: 我正在尝试做的是建立一个SQL查询,这将使我返回: 任何给定[categoryId]的[categoryId],[categoryName]链。它应该循环并获取每一行,直到到达具有parentId == NULL的行为止。 如上面的示例示例234-> 91-> 35-> 20-> 1-> NULL(STOP)

  • 到目前为止,我们一直在使用Spring JpaRepository来满足我们的需求。我觉得这个新需求需要自定义查询,我不认为可以直接使用JParepository来处理这个问题。我只想知道你是怎么想的。不需要自定义sql查询就可以做到这一点吗?

  • 我有这样的层次结构: 因此,用户可以添加他的工作经验。此外,他还可以为特定的项目添加角色。 我想为用户id 1获取项目,但项目之间只有关系 获取用户 获得工作经验 获取角色 获取项目 因此,如果我有更多不同工作经验的角色,我就必须提出20个请求才能得到我的项目。这不是很有效率吗?我必须加载一些不必要的数据。。。 是否可以只创建endpoint:并按用户ID过滤它? 应该如何在API上管理它?对我来

  • 问题内容: 假设您有下表: …这是一个自引用表-指。 您将使用什么SQL查询来选择表中的所有项目以及它们的深度,其中项目的深度是该项目的所有父项和祖父母的总和。 该表的内容是否如下: …查询应检索以下对象集: {“ item_id”:1,“ depth”:0} {“ item_id”:2,“ depth”:0} {“ item_id”:3,“ depth”:1} {“ item_id”:4,“ d

  • 我想枢轴的数据帧像: 进入具有如下分层列的数据帧: 我尝试了,但它只会给我一个这样的框架: 如何更改列的层次结构?