SQL Server如何根据输入的sourceid查询所有关联嵌套子记录
解决方案
普通自连接仅能实现两层数据的关联查询,无法覆盖不确定深度的嵌套父子关系,你可以使用SQL Server 支持的**递归公用表表达式(CTE)**实现需求,具体写法如下:
-- 定义接收用户输入的目标sourceid变量,可根据实际字段类型调整 DECLARE @InputSourceID VARCHAR(50) = 'A1'; WITH RecursiveChildCTE AS ( -- 锚点成员:查询目标sourceid对应的第一层直接子记录 SELECT * FROM testrecords1 WHERE parentid = @InputSourceID UNION ALL -- 递归成员:关联上一层查询结果,获取下一级子记录 SELECT t.* FROM testrecords1 t INNER JOIN RecursiveChildCTE rc ON t.parentid = rc.sourceid ) -- 输出所有层级的子记录 SELECT * FROM RecursiveChildCTE;
额外调整说明
- 如果需要同时返回输入的sourceid对应的根节点本身,可修改锚点成员的筛选条件:
-- 锚点成员替换为匹配目标sourceid自身 SELECT * FROM testrecords1 WHERE sourceid = @InputSourceID - 默认递归深度上限为100,如果数据层级超过100,可在查询末尾添加配置修改最大递归深度:
-- 示例:设置最大递归深度为1000,填0则为无限制 SELECT * FROM RecursiveChildCTE OPTION (MAXRECURSION 1000);
内容的提问来源于stack exchange,提问作者sp_m
相关产品推荐
相关产品推荐

