SQL 递归

题目:

生活中,常遇到ID和ParentID引用问题。

比如当前文件夹下的所有文件夹。

 

分析:

核心思想递归当前文件下的子文件夹。

 

创建数据表:

CREATE TABLE Dept(
    [id] int NULL,
    [parentid] int NULL,
    [name] nvarchar(50) NULL,
    [type] int NULL
)

 

插入数据:Type:0-文件夹;1-文件

INSERT INTO [dbo].[Dept]([id],[parentid],[name],[type])VALUES(1,0,'dept1',1);
INSERT INTO [dbo].[Dept]([id],[parentid],[name],[type])VALUES(2,0,'dept2',1);
INSERT INTO [dbo].[Dept]([id],[parentid],[name],[type])VALUES(3,1,'dept3.1',1);
INSERT INTO [dbo].[Dept]([id],[parentid],[name],[type])VALUES(4,1,'dept4.1',1);
INSERT INTO [dbo].[Dept]([id],[parentid],[name],[type])VALUES(5,2,'dept5.2',1);
INSERT INTO [dbo].[Dept]([id],[parentid],[name],[type])VALUES(6,3,'dept6.3',1);
INSERT INTO [dbo].[Dept]([id],[parentid],[name],[type])VALUES(7,3,'dept7.3',1);
INSERT INTO [dbo].[Dept]([id],[parentid],[name],[type])VALUES(8,1,'dept8.1',0);
INSERT INTO [dbo].[Dept]([id],[parentid],[name],[type])VALUES(9,3,'dept9.3',0);
INSERT INTO [dbo].[Dept]([id],[parentid],[name],[type])VALUES(10,1,'dept10.1',0);

 

 查询脚本:

declare @deptid int
set @deptid=3;

with depts as
(
select * from Dept where id =@deptid
union all
select A.* 
from Dept A inner join depts B
on A.parentid=b.id --and a.[type]=1
)
select * from depts order by parentid, id, type

 

posted @ 2015-03-20 09:36  徐晓徐  阅读(148)  评论(0)    收藏  举报