问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

SQL数据库实现递归查询的几种代码方法

发布网友 发布时间:2023-04-11 04:55

我来回答

1个回答

热心网友 时间:2023-09-20 12:56

  SQL数据库实现递归查询的几种代码方法 表结构

  ProctCategory

  CategoryID Level ParentCategoryID

  数据

  

  

  

  

  

  

  T SQL

  WITH CategoryTemp(CategoryID ParentCategoryID) 临时表用来保存查到的Category

  (

  SELECT CategoryID ParentCategoryID FROM ProctCategory WHERE ParentCategoryID<= 将所有的第一层查出来作为初始数据 需要查第几层或者哪个ParentCategoryID下面所有的 N层 把ParentCategoryID赋相关的值即可

  UNION ALL 查询N层

  SELECT pc CategoryID ParentCategoryID FROM ProctCategory 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           小三                  

lishixin/Article/program/MySQL/201311/29557
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
现在波兰的签证率高不高 去波兰如何办签证 去波兰办签证好办理吗 波兰签证好签吗 win7 多重网络 教师资格证普通话要多少级 想考教师资格证普通话必须过几级 qq影视会员SVIP和超级影视VIP的区别在哪里? 一小撮怎么造句 盛行一时怎么造句 如何进行家庭投资理财? 练习题的解释练习题的解释是什么 教师节的拼音狐教师节的拼音是什么 教法的“教”是读一声还是四声 在部队家里病危怎么办 儿子服役父母亲重病有补救吗 当兵期间家人得了重病会怎样 缴绕的引证解释缴绕的引证解释是什么 步行僵尸2北镇那个庇护所的密码是什么? 行尸2第二章的神秘箱子怎么开 医疗事故预防的方法 为什么vivo手机老是自动挂断电话? _生_的结构_生_的结构是什么 MBA英语顾越好不好? 时笙男主狐狸叫什么 龚鸿裕的瓷器是哪个年代? 梦见用大粪施肥 梦见给麦苗施肥 熬制麻油的方法麻油怎么熬制 夏朝470年,商朝554年,周朝825年,为何秦朝只有15年? h2数据库递归查不来数据 数据库递归查询 茶叶枕头是什么原理? 在小于100的正整数中共有多少个数被7除余2?这些数的和是多少? 由数字1-4可以组成多少个无重复数字且小于100的正整数? 助学贷款还没来怎么支付宝显示有余额 小班绕口令简单有趣大全集 婴幼儿教育:锻炼说话的绕口令 剖腹产选双日子还是单日子 川程的解释 街舞界有哪几个公认的大神? 不锈钢的理论重量计算公式是怎样的? 不锈钢棒的理论重量怎么算? 四大名著缩写作文200字 盗贼遗产2空中冲刺怎么获得 盗贼遗产2空中冲刺获得方法介绍 盗贼遗产2第五关太阳之塔怎么过 盗贼遗产2太阳之塔通关攻略 盗贼遗产2第一关雅格泰堡垒怎么过 盗贼遗产2雅格泰堡垒通关攻略 盗贼遗产2第四关冥界书斋怎么过 盗贼遗产2冥界书斋通关攻略 盗贼遗产2大眼球王怎么打 盗贼遗产2大眼球王打法攻略 盗贼遗产2第二关世界之轴怎么过 盗贼遗产2世界之轴通关攻略