SQL WITH 递归查询
如果表时存放的是树状的数据(如权限、系统模块等)面我们需要根据其中的一条记录查询出它的所有子集记录的话,这篇文章就是最好的解决办法。
直接例子:下面是我的表
表中存放的是后台系统的功能模块信息,ModuleID表示模块的编号、MoudleName表示模块名、ModuleFather表示模块的父级编号(如果为0则表示自己是最高级的)。
现在我们要查询出OA管理的所有子模块(不限级)。
由SQL语句如下。
查询结果为:
上面说了不限级,其实SQL还是有限制的,默认好像是1000级,但我们有时候想看下这些数据能否执行多少级,我们就可以在上面查询的结尾处加上:OPTION(MAXRECURSION 级数)
如果我们在写SQL的时候要求只返回前M级的数据,那么我们可以在上面的查询结果中加一个级数,每递归一次级数加1 ,最后在条件里加上级数限制,代码如下:
01.WITH Modules(ModuleId,ModuleName,ModuleFather,ModuleSort,Lev)02.AS03.(04.SELECT ModuleId,ModuleName,ModuleFather,ModuleSort,005.FROM dbo.Module06.WHERE ModuleId=107.UNION ALL08.SELECT m.ModuleId,m.ModuleName,m.ModuleFather,m.ModuleSort,Lev+109.FROM dbo.Module m10.INNER JOIN Modules a11.ON a.ModuleId=m.ModuleFather12.)13. 14.SELECT m.ModuleId,m.ModuleName,m.ModuleFather,m.ModuleSort15.FROM Modules m16.INNER JOIN dbo.Module mod17.ON m.ModuleFather=mod.ModuleId18.--级数限制19.WHERE Lev<3

浙公网安备 33010602011771号