位置: 编程技术 - 正文

三种实现方法实现数据表中遍历寻找子节点(三种实现方法实现的特点)

编辑:rootadmin
示例问题如下: 表结构: Id ParentId 1 0 2 1 3 2 ...... 针对该表结构解释如下: 1的父节点为0, 2的父节点为1, 3的父节点为2 ...... 以此类推,要求给定一个父节点的值,比如1, 用SQL语句查询的到该父结点下的所有子节点 下面的Sql是在Sql Server下调试通过的,如果是Oracle,则有Connect By可以实现. 建立测试表: Drop Table DbTree Create Table DbTree ( [Id] Int, [Name] NVarChar(), [ParentId] Int ) 插入测试数据: Insert Into DbTree ([Id],[ParentId]) Values (1,0) Insert Into DbTree ([Id],[ParentId]) Values (2,1) Insert Into DbTree ([Id],[ParentId]) Values (3,1) Insert Into DbTree ([Id],[ParentId]) Values (4,3) Insert Into DbTree ([Id],[ParentId]) Values (5,4) Insert Into DbTree ([Id],[ParentId]) Values (6,7) Insert Into DbTree ([Id],[ParentId]) Values (8,5) 实现方法一: 代码如下: Declare @Id Int Set @Id = 1 ---在次修改父节点 Select * Into #Temp From DbTree Where ParentId In (@Id) Select * Into #AllRow From DbTree Where ParentId In (@Id) --1,2 While Exists(Select * From #Temp) Begin Select * Into #Temp2 From #Temp Truncate Table #Temp Insert Into #Temp Select * From DbTree Where ParentId In (Select Id From #Temp2) Insert Into #AllRow Select * From #Temp Drop Table #Temp2 End Select * From #AllRow Order By Id Drop Table #Temp Drop Table #AllRow 实现方法二: 代码如下: Create Table #AllRow ( Id Int, ParentId Int ) Declare @Id Int Set @Id = 1 ---在次修改父节点 Delete #AllRow --顶层自身 Insert Into #AllRow (Id,ParentId) Select @Id, @Id While @@RowCount > 0 Begin Insert Into #AllRow (Id,ParentId) Select B.Id,A.Id From #AllRow A,DbTree B Where A.Id = B.ParentId And Not Exists (Select Id From #AllRow Where Id = B.Id And ParentId = A.Id) End Delete From #AllRow Where Id = @Id Select * From #AllRow Order By Id Drop Table #AllRow 实现方法三: 代码如下: 在Sql Server中其实提供了CTE[公共表表达式]来实现递归: 关于CTE的使用请查MSDN Declare @Id Int Set @Id = 3; ---在次修改父节点 With RootNodeCTE(Id,ParentId) As ( Select Id,ParentId From DbTree Where ParentId In (@Id) Union All Select DbTree.Id,DbTree.ParentId From RootNodeCTE Inner Join DbTree On RootNodeCTE.Id = DbTree.ParentId ) Select * From RootNodeCTE

推荐整理分享三种实现方法实现数据表中遍历寻找子节点(三种实现方法实现的特点),希望有所帮助,仅作参考,欢迎阅读内容。

三种实现方法实现数据表中遍历寻找子节点(三种实现方法实现的特点)

文章相关热门搜索词:实现方式,三种实现方法实现文件的复制,实现方法是什么意思,实现步骤如何写,实现步骤如何写,实现方法是什么意思,三种实现方法实例分析,三种实现方法实例分析,内容如对您有帮助,希望把文章链接给更多的朋友!

经典SQL语句大全第1/2页 下列语句部分是Mssql语句,不可以在access中使用。SQL分类:DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE)DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT)DCL—

实例学习mssql存储过程分析 例1:通过存储过程查询数据库中的student表我们知道在sql中,我们查询一个表,可以通过select*fromstudent进行查询,那在存储过程中该怎么写呢?解:首先我

SQL Server中选出指定范围行的SQL语句代码 在数据库查询的时候,我们有时有这样的需求,就是要找出数据表里指定范围行内的数据记录,比如说要找出数据表里第行到第行的这条数据,那么我们

标签: 三种实现方法实现的特点

本文链接地址:https://www.jiuchutong.com/biancheng/348455.html 转载请保留说明!

上一篇:一道sql面试题附答案(sql面试题50题)

下一篇:用SQL统计SQLServe表存储空间大小的代码

  • 怎么应对降税,不含税价怎么应对
  • 材料抵扣货款怎么写简单协议范本
  • 综合收入扣税
  • 发票在系统里作用大吗
  • 劳保用品销售
  • 工商年报纳税总额包括哪些税
  • 城市生活垃圾处理收费管理办法
  • 鲜花虫草开发票属于什么类别?
  • 现金流量表存货增加是负的
  • 医院工作服记什么科目
  • 企业所得税预缴少申报案例
  • 2021小规模纳税人减免增值税
  • 增值税专用发票几个点
  • 企业所得税准予扣除
  • 库存现金盘盈盘亏的账务处理
  • 公租房租金收入什么科目
  • 进货方的现金折扣怎么处理?
  • 外购电力费用分配例题
  • 在建工程安装工程包括
  • 没有汇算清缴可以弥补以前年度亏损吗
  • 计提汇算清缴所得税分录
  • 如何查询已开出的增值税发票是否被认证
  • 未交增值税借方表示什么
  • 法人变更了还用变更发票领用本吗
  • 小规模纳税人残疾人纳税优惠
  • 替票是什么和发票的区别
  • 承兑汇票怎么换算
  • 品牌店设计费入什么费用
  • 冲销暂估成本如何写摘要?
  • 公立医院规章制度
  • 小规模纳税人领发票要带什么
  • 个体户季度超30万要交多少税
  • 会计报表怎么处理
  • 去年管理费用多记账结账如何调账
  • linux help
  • 发放股票股利的会计分录怎么写
  • 苹果mac os x 10.7.5
  • linux系统输入
  • 年度确认收入怎么算
  • 企业会计核算利润表
  • 运输取得的收入
  • thinkphp exec
  • jquery和php
  • 什么是加计扣除政策
  • php curl_multi_init
  • css过渡动画属性
  • tcpreplay命令详解
  • 汇总纳税企业所得税征收管理办法
  • 残疾人保证金如何做账
  • 分公司和总公司的账务处理
  • 无形资产和固定资产减值准备可以转回吗
  • 小微企业免征增值税政策2022
  • 其他业务成本如何结转
  • 单位食堂厨房设计方案
  • 公司逾期交税,后期补上有何后果
  • 2022年我们国家将举行什么样的盛会
  • protobuf 文档
  • 公账转钱出来要收手续费吗
  • 个体户税务分几种
  • 小规模纳税人认定标准500万
  • 购买其他权益工具投资公允大于我支付的价值
  • 地下车库的成本和房子哪个高
  • 营销策划费用是
  • 购买原材料还没发票
  • 一般纳税人月销售额10万以下
  • 印花税的征税对象有哪些
  • 主营业务成本为什么借增贷减
  • 微软官微
  • window所有程序在哪里
  • win7升级win10之后视频解码能力变弱
  • 怎样下载电子书免费的
  • linux新手教学
  • pm2使用手册
  • Metaio in Unity3d 教程--- 四:再谈谈图片扫描之tracking配置文件
  • python中urllib.unquote乱码的原因与解决方法
  • node断点调试
  • JavaScript中setUTCFullYear()方法的使用简介
  • 鼠标瞬间移动
  • 面向对象的java语言
  • 养猪环保局有什么新政策
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设