SQL递归查询(with table as)
with [table] as
(
select Id,PARENT_ID,DICT_TEXT,DICT_CODE, 0 as lvl from T_SYS_DICT
where Id = '000000236'
union all
select d.Id,d.PARENT_ID,d.DICT_TEXT,d.DICT_CODE,lvl + 1 from [table] c inner join T_SYS_DICT d
on c.Id = d.PARENT_ID
)
select * from [table]
表内容:
ID DICT_TEXT DICT_NAME DICT_CODE 000000236 000000003 文件分类 FileType 000000534 000000236 排污许可 008 000000542 000000236 污染监测 009 000000546 000000236 环境监察 010
查询结果:
ID DICT_TEXT DICT_NAME DICT_CODE lvl 000000236 000000003 文件分类 FileType 0 000000534 000000236 排污许可 008 1 000000542 000000236 污染监测 009 1 000000546 000000236 环境监察 010 1
递归CTE最少包含两个查询(也被称为成员)。第一个查询为定点成员,定点成员只是一个返回有效表的查询,用于递归的基础或定位点。第二个查询被称为递归成员,使该查询称为递归成员的是对CTE名称的递归引用是触发。在逻辑上可以将CTE名称的内部应用理解为前一个查询的结果集。
递归查询没有显式的递归终止条件,只有当第二个递归查询返回空结果集或是超出了递归次数的最大限制时才停止递归。是指递归次数上限的方法是使用MAXRECURION。

浙公网安备 33010602011771号