SQL 递归查询实现部门层级显示 - 代码示例与解析
使用递归查询来实现按照级别显示的需求,具体的SQL语句如下:\n\n\nWITH RECURSIVE cte AS (\n SELECT id, name, parent_id, 0 AS level\n FROM departments\n WHERE parent_id IS NULL\n UNION ALL\n SELECT d.id, d.name, d.parent_id, cte.level + 1\n FROM departments d\n INNER JOIN cte ON d.parent_id = cte.id\n)\nSELECT CONCAT(REPEAT('-', cte.level), cte.name) AS department\nFROM cte\nORDER BY cte.id;\n\n\n这里假设有一个名为departments的表,其中包含以下列:\n- id:部门ID\n- name:部门名称\n- parent_id:父级部门ID(顶级部门的parent_id为NULL)\n\n上述SQL语句中,使用了递归查询CTE(Common Table Expression)来逐级获取部门信息。首先选择顶级部门(即parent_id为NULL的部门),然后递归地连接子部门,同时通过level记录当前层级。\n\n最后,使用CONCAT函数和REPEAT函数将部门名称前面添加相应数量的连字符,以形成层级结构。结果按照部门ID排序,以确保上级部门在下级部门之前显示。
原文地址: https://www.cveoy.top/t/topic/p4GI 著作权归作者所有。请勿转载和采集!