递归查询

时间:2024-09-10 05:02:24编辑:流行君

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年


上一篇:网站访客qq统计

下一篇:忍住不哭我要忍住不哭