博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sql 递归的写法
阅读量:4212 次
发布时间:2019-05-26

本文共 902 字,大约阅读时间需要 3 分钟。

1、既然要谈到sql,数据库表是必须的

 

2、数据结构

   

3、获取某个节点的所有子节点

    传统的写法(sql2000) 很麻烦,暂且就不写了

    来看看CTE的写法

   

CREATE PROC sp_getTreeById(@TreeId int)ASBEGIN        WITH cteTree        AS (SELECT *              FROM TuziTree              WHERE Id = @TreeId  --第一个查询作为递归的基点(锚点)            UNION ALL            SELECT TuziTree.*     --第二个查询作为递归成员, 下属成员的结果为空时,此递归结束。              FROM                   cteTree INNER JOIN TuziTree ON cteTree.Id = TuziTree.ParentId)         SELECT *          FROM cteTree   END

  测试一下啊  

exec  sp_getTreeById  @TreeId=1001                          

结果

-----------------------------------------------

4、使用节点路径来做(每个节点路径都保存自身的路径和所有父节点的路径=自己和所有父节点的关联)

   

5、既然有个路径

  那么查询其所有子节点 只需要 where nodePath like '/1001/%'了

  这样就会简单很多,加上索引。

总结:

  如果在性能的需要上,我们可以采用按需加载,点击节点时候 才会加载其所有子节点。

  如果在变化不大的情况下,可以采用缓存 。这样的处理 可以满足很多业务需求。

  良好的表设计会给后期的开发以及需求变化 带来更多的便利。

  下次继续总结sql方面的知识,案例一切以实际工作演变而来。

相关网址:http://www.cnblogs.com/zjflove/p/4245990.html
你可能感兴趣的文章
《redis in action》ZSet相关命令
查看>>
《redis in action》redis发布订阅
查看>>
《redis in action》sort排序命令
查看>>
《redis in action》redis事务
查看>>
《redis in action》key的自动过期
查看>>
《redis in action》redis持久化简介
查看>>
《redis in action》redis快照
查看>>
《redis in action》Redis aof持久化
查看>>
《redis in action》开启aof日志
查看>>
CS224N研究热点2_Linear Algebraic Structure of Word Senses, with Applications to Polysemy(对于一词多义的向量表示研究)
查看>>
Java编程中,什么数据类型适合用来表示价格?
查看>>
ssh出错:sign_and_send_pubkey: signing failed: agent refused operation
查看>>
Zookeeper启动成功,但无法查看status
查看>>
OCFS2+ASM 的RAC安装文档
查看>>
Oracle RAC Failover 详解
查看>>
批处理 自动修改 IP 地址
查看>>
Oracle RAC LoadBalance
查看>>
v$sql,v$sqlarea,v$sqltext 和 v$sql_plan 说明
查看>>
ORA-31623 When Submitting a Datapump Job [ID 308388.1]
查看>>
Oracle SYSAUX 表空间 说明
查看>>