MySQL层级查询需求:获取组织全层级归属关系
解决方案:递归查询组织层级归属关系
嘿 Piotr,针对你需要查询每个组织向上所有高阶归属的需求,用**递归CTE(Common Table Expression)**就能完美解决,这是处理树形层级数据的标准方案。
下面是可以直接运行的SQL语句,完全匹配你想要的输出格式:
WITH OrgHierarchy AS ( -- 锚点成员:先获取每个组织自身的归属关系(层级起点) SELECT Id, Id AS BelongsToOrgId, Name AS OrgName, Name AS BelongsToOrgName FROM Organizations UNION ALL -- 递归成员:向上遍历父级组织,直到没有顶级父级(ParentId IS NULL) SELECT o.Id, oh.BelongsToOrgId, o.Name AS OrgName, oh.BelongsToOrgName FROM Organizations o INNER JOIN OrgHierarchy oh ON o.ParentId = oh.Id ) -- 整理成你需要的最终输出格式 SELECT Id, BelongsToOrgId, CONCAT(OrgName, '是', BelongsToOrgName, '的一部分') AS 描述 FROM OrgHierarchy ORDER BY Id, BelongsToOrgId;
代码逻辑说明:
- 锚点部分:先把每个组织和自身的归属关系列出来,这是遍历层级的基础起点;
- 递归部分:通过关联父级ID,不断向上追溯每个组织的上级节点,直到触及最顶级的
Company(它的ParentId为NULL,会自动终止递归); - 结果整理:用
CONCAT函数拼接出你需要的中文描述,并按组织ID和归属ID排序,让结果更清晰易读。
执行这段SQL后,就能得到你期望的完整归属关系列表啦。
内容的提问来源于stack exchange,提问作者piotrassss
相关产品推荐
相关产品推荐

