本文介绍的是用关系数据库来存储CFG(控制流程图)的信息。在查询时,为了得到所有dominate关系的结果,使用了CTE来进行递归查询。
本文介绍的是用关系数据库来存储CFG(控制流程图)的信息。在查询时,为了得到所有dominate关系的结果,使用了CTE来进行递归查询。
简单例子如下:
1. 现有表testRe结构如下
2. 欲得到的查询结果为找到id='a'的项的所有pId,即b、c、d。
3. 使用CTE做递归查询:
WITH Re_CTE(id, pId, Level) Technorati 标签: sql server,CTE,递归,查询 AS ( SELECT id, pId, 1 AS [Level] FROM testRe WHERE id='a' UNION ALL SELECT t.id, t.pId, [Level] + 1 FROM testRe t INNER JOIN Re_CTE ct ON t.id=ct.pId ) SELECT * FROM Re_CTE
其中,Level为可选项
4. 查询结果为:
5. CTE的简单说明(参考MSDNhttp://msdn.microsoft.com/zh-cn/library/ms186243%28SQL.90%29.ASPx):
WITH cte_name(column_name [,...n]) AS ( CTE_query_definition –- Anchor member is defined. UNION ALL CTE_query_definition –- Recursive member is defined referencing cte_name. ) -- Statement using the CTE SELECT * FROM cte_name
一个递归 CTE 结构必须至少包含一个定位点成员和一个递归成员。
执行时:
将 CTE 表达式拆分为定位点成员和递归成员。
运行定位点成员,创建第一个调用或基准结果集 (T0)。
运行递归成员,将 Ti 作为输入,将 Ti+1 作为输出。
重复步骤 3,直到返回空集。
返回结果集。这是对 T0 到 Tn 执行 UNION ALL 的结果。
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索递归
, select
, 查询
, 结果
, 递归查询
, cte
, 成员
, cte解决复杂查询
, 数据库递归查询
, sql递归查询
Defined标签
关系数据库 存储图、server.cfg、求生之路2 server.cfg、commonserver.cfg中文、csgo server.cfg,以便于您获取更多的相关知识。