SQL系列关于树

在此讲解树排序:

测试数据表,设为A表:


ID  项目编号
PID 父类ID
Name 项目名称
这里模拟单编号法对树排序:
先模拟单编号表,设为B表,声明如下:


注意:
level  树的深度
sort  最终的排序依据
基本原理:
首先把树的最底端数据插入到B表
然后联合A表,联立得条件是:A.ID=B.PID
通过这个方法显然我们只能得到两级数据,此时我们使用循环
while, 这时用到@@ROWCOUNT=0(执行sql所影响的行数)退出循环
注意:每次循环时只需要读取B表中深度最大的值即在where 限制条件时要加上句:@Level-1=Level

结果:

查找指定子节点:
上例其实是查找指定子节点的特殊情况即父节点为null的极端,只要把上述的PID为null 改为相应的要查找节点ID即可
具体方法请参考上述事例
查找指定父节点:
这个运算中主要是模拟编号表要新加入PID字段,另外在条件查询时注意,B.PID=A.ID  请见代码:

结果:

删除所有节点:
其实也就是对模拟编号表的delete操作 略去

posted @ 2010-04-19 14:55  地狱伞兵  阅读(1974)  评论(7编辑  收藏  举报