根据父ID 查询所有子节点
-- with一个临时表(括号中是你要查询的列名)
with temp(subject_id,parent_id,Name,curLevel)as
(--1:初始查询(这里的PID=-1 在我的数据中是最底层的根节点)
select subject_id,parent_id,Name,1 as level from Subject
where parent_id = 1 -- 注意这里
union all
--2:递归条件
select a.subject_id,a.parent_id,a.Name, b.curLevel+1 from Subject a --3:这里的临时表和原始数据表都必须使用别名,不然递归的时候不知道查询的是那个表的列
inner join
temp b
on ( a.parent_id=b.subject_id) --这个关联关系很重要,一定要理解一下谁是谁的父节点
)
select * from temp --4:递归完成后 一定不要少了这句查询语句 否则会报错
根据id查询所有父节点
-- with一个临时表(括号中是你要查询的列名)
with temp(org_id,parent_id,org_name,curLevel)as
(
-- 1:初始查询(这里的PID=-1 在我的数据中是最底层的根节点)
select org_id,parent_id,org_name,1 as level from Organization
where org_id = 10101 -- 注意这里
union all
-- 2:递归条件
select a.org_id,a.parent_id,a.org_name, b.curLevel+1 from Organization a
-- 3:这里的临时表和原始数据表都必须使用别名,不然递归的时候不知道查询的是那个表的列
inner join
temp b
on ( b.parent_id=a.org_id) -- 这个关联关系很重要,一定要理解一下谁是谁的父节点
)
select * from temp -- 4:递归完成后 一定不要少了这句查询语句 否则会报错
查询给定节点的所有父级节点和子节点
with tail(org_id,parent_id,org_name)as
(
select org_id,parent_id,org_name from Organization
where parent_id = 10101
union all
select a.org_id,a.parent_id,a.org_name from Organization a
inner join
tail b
on ( a.parent_id=b.org_id)
),head(org_id,parent_id,org_name)as
(
select org_id,parent_id,org_name from Organization
where org_id = 10101
union all
select a.org_id,a.parent_id,a.org_name from Organization a
inner join
head b
on ( b.parent_id=a.org_id)
)
select * from head
union
select * from tail