·天新网首页·加入收藏·设为首页
首页|笔记本|手机|数码相机|摄像机|MP3/MP4|主板|内存|显示器|办公|打印机|下载|开发|汽车|学院|业界
硬件|台式机|数码|数字家庭|投影仪|GPS/CPU|显卡|硬盘|服务器|网络|一体机|驱动|源码|游戏|考试|报价
三种实现方法实现数据表中遍历寻找子节点
http://dev.21tx.com 2008年05月16日 赛迪网 Isaac

1 2 下一页

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

  示例问题如下:

  表结构:

  

  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(20),

  [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

上一篇: 讲解数据库加密技术的功能特性与实现方法
下一篇: 可以适应多种环境的共享数据结构设计示例

1 2 下一页

Google
 
热点文章
关于我们 | 联系我们 | 广告服务 | 工作机会 | 版权声明 | 欢迎投稿 | 网站地图
Copyright © 2000-2008 , www.21tx.com , All Rights Reserved .
晨新科技 版权所有 Created by TXSite.net