龙空技术网

SQL Server 递归查询

数据超库 390

前言:

当前你们对“sqlserver查询第一条数据”都比较关注,同学们都需要剖析一些“sqlserver查询第一条数据”的相关内容。那么小编在网摘上汇集了一些对于“sqlserver查询第一条数据””的相关资讯,希望同学们能喜欢,小伙伴们一起来学习一下吧!

在SQL Server中经常会进行递归查询,用来查询子节点上一级或者N层上级的数据,这时候With子句就派上了用场,下面以行政区域数据为例, 展示在SQLSERVER中如何进行递归查询:

drop table test_a;create table test_a ( id int,name varchar(10), pid int);insert into test_aselect 1,'中国',0 union allselect 2,'江苏省',1 union allselect 3,'南京市',2 union allselect 4,'雨花台区',3 union allselect 5,'江宁区',3 union allselect 6,'鼓楼区',3select * from test_a

表中所有记录数据

下面SQL语句递归查询某个区域(如鼓楼区)的所有上级行政区(父节点):

with cte as(select * from test_a where id=6union allselect test_a.* from test_a ,cte where test_a.id=cte.pid)select * from cte order by id;

鼓楼区所有父节点数据

下面递归查询父节点下级各层区域数据:

 with cte_a (id, name, pid, level) as( select test_a.*, 0 level from test_a where pid=0 union all select test_a.*, cte_a.level+1 level from test_a, cte_a where test_a.pid = cte_a.id)select case when level=0 then name else REPLICATE(' ', level) + '└' + name end, id, pidfrom cte_a;

各级行政数据

标签: #sqlserver查询第一条数据