SQL语句查询出一个父节点下的所有子节点

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL语句查询出一个父节点下的所有子节点相关的知识,希望对你有一定的参考价值。

id username parentid
1 user1 0
2 user2 1
3 user3 2
4 user4 3
用一条SQL查出user1下面的所有子用户(2,3,4都是他的子用户)怎么查
如果没有比较好的办法,查出他下面的用户2和3也可以
parentID是父节点,也就是关联主键id的

参考技术A 假如你的表名字是tt,创建下面的存储过程,使用存储过程即可查询。

create proc querytree
@user varchar(100)
as
begin
declare @id int
declare @T_tmp table(id int,username varchar(100),parentid int)
insert into @T_tmp select * from tt where username=@user
while(@@rowcount>0)
begin
insert into @T_tmp select * from tt where parentid in (select id from @T_tmp) and id not in(select id from @T_tmp)
end
select * from @T_tmp where username<>@user
end
参考技术B 同一个表不能差出来的
不过下面这句可以实现差出所有有父id的条目 如果要在加上 user1那就不行了
select * from user where parentid in (select id from user)
参考技术C select b.* from tablename a,tablename b where a.id<=b.parentid
and a.username='user1'本回答被提问者采纳
参考技术D 楼主,我完全没看明白你的意思。字段之间的关系你都没有说清楚。

[SQL]T-Sql 递归查询(给定节点查所有父节点所有子节点的方法)


-- 查找所有父节点
with tab as
(
 select Type_Id,ParentId,Type_Name from Sys_ParamType_V2_0 where Type_Id=316--子节点
 union all
 select b.Type_Id,b.ParentId,b.Type_Name 
 from
  tab a,--子节点数据集
  Sys_ParamType_V2_0 b  --父节点数据集
 where a.ParentId=b.Type_Id  --子节点数据集.parendID=父节点数据集.ID
)
select * from tab;
 

-- 查找所有子节点
with tab as
(
 select Type_Id,ParentId,Type_Name from Sys_ParamType_V2_0 where Type_Id=1--父节点
 union all
 select b.Type_Id,b.ParentId,b.Type_Name 
 from
  tab a,--父节点数据集
  Sys_ParamType_V2_0 b--子节点数据集 
 where b.ParentId=a.Type_Id  --子节点数据集.ID=父节点数据集.parendID
)
select * from tab;

 

--查找从子节点到定级节点的路径
with tab as
(
 select Type_Id,ParentId,Type_Name,cast(Type_Id as varchar(100)) as fulltypeid
 from SKU_ProductType where Type_Id=423--子节点
 union all
 select
   b.Type_Id,b.ParentId,b.Type_Name,
   cast(a.fulltypeid+‘,‘+cast(b.Type_Id as nvarchar(100)) as varchar(100)) as fulltypeid
 from
  tab a,--子节点数据集
  SKU_ProductType b  --父节点数据集
 where a.ParentId=b.Type_Id  --子节点数据集.parendID=父节点数据集.ID
)
select * from tab ;

--------------结果--------------
423    410   蜂花粉      423
410    347   蜂产品      423,410
347    5      营养食品   423,410,347
5        0      健康保健   423,410,347,5

以上是关于SQL语句查询出一个父节点下的所有子节点的主要内容,如果未能解决你的问题,请参考以下文章

高手帮忙:sql 里怎样递归判断父节点和子节

递归SQL语句

SQL查询父节点下的所有子节点(包括子节点下的子节点,无限子节点)

求高手帮忙sql写法:树节点放一个表中,怎么用一条语句查询一个节点及对应的所有父节点信息。

TreeView 点击触发父节点子节点的连锁反应选中与取消

sql 知道父节点,查询所有的子节点,运用游标,递归,存储过程