发布网友 发布时间:2022-05-02 04:19
共2个回答
懂视网 时间:2022-05-02 08:41
table test1 ( cid int, cpid int ) insert into test1 (cid,cpid) values(1,0); insert into test1 (cid,cpid) values(2,1); insert into test1 (cid,cpid) values(3,1); insert into test1 (cid,cpid) values(4,2); insert into test1 (cid,cpid) values(5,3); insert into test1 (cid,cpid) values(6,3); select * from test1 --找根的所有子 select * from test1 start with cpid = 0 Connect by prior cid = cpid --找 子所在的根节点 select * from test1 start with cid = 3 Connect by prior cpid = cid select * from( select * from test1 start with cid = 3 Connect by prior cpid = cid) where cid <> 3另外,SQLServer查询树结构下的所有子节点可以用如下语句:
WITH cteTree AS (SELECT * FROM test1 WHERE CId = @TreeId --第一个查询作为递归的基点(锚点) UNION ALL SELECT test1.* --第二个查询作为递归成员, 下属成员的结果为空时,此递归结束。 FROM cteTree INNER JOIN test1 ON cteTree.CId = test1 .PId) SELECT * FROM cteTree
太晚了,明天再完善SQLServer的
Oracle递归查询树结构
标签:结束 with values 树结构 数据库 inner tar from 工作
热心网友 时间:2022-05-02 05:49
可能一看到递归查询这样太专业的名词大家就迷糊了.实际上可以看成有一个树形结构,然后我们要怎么把所有树的所有结点查找出来.学数据结构的时候我们知道要遍历一个树结构有啥前序遍历,中序遍历,后序遍历.反正挺麻烦的.不像遍历个数组那么容易的.那实际上在Oracle的一个表中也可以保存树形结构信息.你要查询所有的树节点,自己整个函数或存储过程去整肯定是超级麻烦的.Oracle提供了一个简单的机制帮助你.要用到start with ...connect by等关键字.先来假定有下面这样一个简单的树形结构存储在表中.