通过sql语句递归查找所有下级或上级用户

来源:未知 责任编辑:智问网络 发表时间:2013-09-22 21:30 点击:
1.MS Sql
 
with cte as
(
    select Id,Pid,DeptName, 0 as lvl from Department
    where Id = 2
    union all
    select d.Id,d.Pid,d.DeptName,lvl + 1 from cte c inner join Department d
    on c.Id = d.Pid
)
select * from cte
 
2.Oracle
 
一、建表
  CREATE TABLE USERS.TBL_TEST
 
  (
 
  ID    NUMBER,
 
  NAME  VARCHAR2(100 BYTE),
 
  PID   NUMBER                                  DEFAULT 0
 
  )
 
  INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('1','10','0');
 
  INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('2','11','1'
 
  INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('3','20','0');
 
  INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('4','12','1');
 
  INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('5','121','2');
 
  二、格式
 
  Select * from …. Where [结果过滤条件语句]
 
  Start with  [and起始条件过滤语句]
 
  Connect by prior [and中间记录过滤条件语句]
 
  三、查找所有下级
 
  select * from tbl_test start with id=1 connect by prior id=pid
 
  注意:此sql能查找id=1的数据的所有下级,写sql语句时要注意,因为是从id开始查找下级,所以connect by prior 子句的条件是id=pid
 
  四、查找所有上级
 
  select * from tbl_test start with id=5 connect by prior pid=id
 
  因为是从id开始查找上级,所以connect by prior 子句的条件是pid=d
 
    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • sql常见面试题
    • SQL SERVER 2005性能之跟踪
    • SQL编程(一)
    • LINUX上RMAN自动备份脚本
    • sql server面试题
    • 如何将多个SQL查询统计结果一次显示出来
    • 浅谈SQL Server中的事务日志(三)----在简单恢复模式下日志的角色
    • sql server 列转行
    • SQL小技巧系列 --- 行转列合并
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1