SQL数据库实现递归查询的几种代码方法
SQL 数据库 实现递归查询的几种代码方法 表结构 ProductCategory CategoryID Level ParentCategoryID 数据 T SQL WITH CategoryTemp(CategoryID ParentCategoryID) 临时表用来保存查到的Category ( SELECT CategoryID ParentCategoryID FROM ProductCategory WHERE ParentCategoryID<= 将所有的第一层查出来作为初始数据 需要查第几层或者哪个ParentCategoryID下面所有的 N层 把ParentCategoryID赋相关的值即可 UNION ALL 查询N层 SELECT pc CategoryID ParentCategoryID FROM ProductCategory pc LEFT JOIN CategoryTemp ct ON pc ParentCategoryID=ct CategoryID WHERE ParentCategoryID> 因为第一层前面已经查出来了 所以这里把第一层筛选掉 ) SELECT CategoryID ParentCategoryID FROM CategoryTemp 结果 如果把ParentCategoryID赋为 结果则为 实例 ID 是否为部门 部门名 上级ID y 部门 y 部门 n 张三 n 李二 y 部门 n 王五 y 部门3 n 小三 我想找询 ID 值为 下级的所有人员包括下级部门的所有人员 创建查询函数 create function f_id( @id int 要查询的id )returns @re table(id int level int) as begin declare @l int set @l= insert @re select id @l from 表 where 上级id=@id while @@rowcount> begin set @l=@l+ insert @re select a id @l from 表 a join @re b on a 上级id=b id and b level=@l end return end go 调用函数进行查询 select a * from 表 a join f_id( ) b on a id=b id 联合查询 测试数据 create table 表(ID int 是否为部门 char( ) 部门名 varchar( ) 上级ID int) insert 表 select y 部门 union all select y 部门 union all select n 张三 union all select n 李二 union all select y 部门 union all select n 王五 union all select y 部门 union all select n 小三 go 创建查询函数 create function f_id( @id int 要查询的id )returns @re table(id int level int) as begin declare @l int set @l= insert @re select id @l from 表 where 上级id=@id while @@rowcount> begin set @l=@l+ insert @re select a id @l from 表 a join @re b on a 上级id=b id and b level=@l end return end go 调用函数进行查询 select a * from 表 a join f_id( ) b on a id=b id go 删除测试 drop table 表 drop function f_id /* 测试结果 ID 是否为部门 部门名 上级ID n 小三 lishixinzhi/Article/program/MySQL/201311/29557
sql 怎么递归查询的方法:
1.创建测试表,createtabletest_connect(idnumber,p_idnumber);2.插入测试数据,Insertintotest_connectvalues(1,1);Insertintotest_connectvalues(2,1);Insertintotest_connectvalues(3,2);Insertintotest_connectvalues(4,3);提交;3.查询数据表的内容,选择*fromtest_connect,4.执行递归查询语句,将答案添加到nocycle元素中,就不会有[ora-01436:CONNECTBYerrorintheuserdata]。执行结果如下:Select*来自test_connectt从id=4开始由nocyclepriort连接。p_id=t.i.
路由器的递归查询怎样解释?
比如说有计算机A,路由器BCDEA想知道 xxx.com所对应的IP是多少?A就去问B,这时候A是请求者,B是被请求者;但是B也不知道xxx.com的IP,那么它就去问C,这时个B变成了请求者,C是被请求者如此递归到E时,假设E知道xxx.com知道返回了xxx.com的IP给D,然后D再告诉C,C再告诉B,B再告诉了A,这样就完成了查询。。。这样的方式就叫递归。。。另外还有一种叫迭代。。。比如说A想知道xxx.com,去请求B,B这时候告诉A说,“C可能xxx.com,你去问它吧”,这时候A再去请求C,C这时候告诉A说,“D可能xxx.com,你去问它吧”,。。。直到A去请求E,这时候E就告诉了A,xxx.com的IP地址是xx.xxx.xx.xx
什么是递归路由?
比如说有计算机A,路由器BCDEA想知道 xxx.com所对应的IP是多少?A就去问B,这时候A是请求者,B是被请求者;但是B也不知道xxx.com的IP,那么它就去问C,这时个B变成了请求者,C是被请求者如此递归到E时,假设E知道xxx.com知道返回了xxx.com的IP给D,然后D再告诉C,C再告诉B,B再告诉了A,这样就完成了查询。。。这样的方式就叫递归。。。另外还有一种叫迭代。。。比如说A想知道xxx.com,去请求B,B这时候告诉A说,“C可能xxx.com,你去问它吧”,这时候A再去请求C,C这时候告诉A说,“D可能xxx.com,你去问它吧”,。。。直到A去请求E,这时候E就告诉了A,xxx.com的IP地址是xx.xxx.xx.xx
2011年