关闭

sql语句查询下级下下级

706人阅读 评论(0) 收藏 举报
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
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:77796次
    • 积分:1728
    • 等级:
    • 排名:千里之外
    • 原创:87篇
    • 转载:75篇
    • 译文:0篇
    • 评论:2条
    博客专栏
    最新评论