在线求助,如何在分页查询里面,使用递归查询??
如何在分页查询里面,使用递归查询出部门dept_id=1和它的下属部门、下下属部门.
create table userinfo(name varchar(50),dept_id int);goinsert into userinfo values('a',1);insert into userinfo values('b',2);insert into userinfo values('c',3);insert into userinfo values('d',4);insert into userinfo values('e',5);insert into userinfo values('f',6);insert into userinfo values('g',7);insert into userinfo values('h',8);insert into userinfo values('i',9);insert into userinfo values('j',10);gocreate table dept(dept_id int,p_dept_id int,dept_name varchar(10));goinsert into dept values(1,0,'aa');insert into dept values(2,0,'bb');insert into dept values(3,1,'cc');insert into dept values(4,1,'dd');insert into dept values(5,2,'ee');insert into dept values(6,3,'ff');insert into dept values(7,4,'gg');goselect * from (select uml.NAME as '姓名',uml.dept_id as '部门',Row_Number() over(order by name asc) RowNumber from userinfo uml )temp1 where RowNumber BETWEEN 1 and 5 --分页查询gowith my1 as(select * from dept where dept_id = 1 union all select dept.* from my1, dept where my1.dept_id = dept.p_dept_id)select * from my1 ;--递归查询gotruncate table userinfo;truncate table dept;drop table userinfo;drop table dept;
select *fromselect uml.NAME as '姓名',uml.dept_id as '部门',Row_Number() over(order by name asc) Rowumber from((select * from dept where dept_id = 1 union all select dept.* from my1, dept where my1.dept_id = dept.p_dept_id)K)Lwhere Rowumber between 1 and 5不过既然使用cte,那就多分几个步骤写,不用写到一个里面,比较难理解go
[解决办法]
最外层的from少一个(
[解决办法]
你不都写出来了吗?
把你的CTE写成子查询就可以了
[解决办法]
with my1 as(select * from dept where dept_id = 1 union all select dept.* from my1, dept where my1.dept_id = dept.p_dept_id)select * from (select uml.NAME as '姓名',uml.dept_id as '部门',Row_Number() over(order by name asc) RowNumber from userinfo uml, my1 um2 where uml.dept_id=um2.dept_id)temp1 where RowNumber BETWEEN 1 and 5----------a 1 1c 3 2d 4 3f 6 4g 7 5
[解决办法]