系统在开发过程,用到机构信息的树状结构,数据库表中关键的三个字段:机构ID,父级机构ID,机构名。
网上搜了很多的技术文单。需要按示例一个个去仔细判别各个表名、字段 以及关联关系,头痛。整理其SQL编写模式如下:
-------------------------------------------------------------------------------
WITH RECURSIVE 递归查询名称 AS (
--起始第一条记录,即根节点
SELECT 数据唯一索引ID值, 父ID值, cast(数据唯一索引ID值 as text) AS 节点遍历路径 --节点遍历路径,第一个节点的值为数据,注意此处必须为文本字符串
FROM 源始数据表名
WHERE 开始节点的字段名=开始节点判定条件
UNION ALL
--下属节点数据记录
SELECT 下属查询表别名.数据唯一索引ID值, 下属查询表别名.父ID值, CONCAT(递归查询名称别名.节点遍历路径, '>', 下属查询表别名.数据唯一索引ID值) 节点遍历路径
FROM 源始数据表名 下属查询表别名
--连接递归查询
JOIN 递归查询名称 递归查询名称别名 ON 递归查询名称别名.数据唯一索引ID值 = 下属查询表别名.父ID值
)
SELECT * FROM 递归查询名称 order by 节点遍历路径;
-------------------------------------------------------------------------------
以下是个具体的示例:
WITH RECURSIVE tree AS (
SELECT brcid, brcname,parentbrc, cast(brcid as text) AS path1
FROM btc_src_brcinfo
WHERE parentbrc='800000000' --开始节点
UNION ALL
SELECT e.brcid, e.brcname,e.parentbrc, CONCAT(s.path1, '>', e.brcid) path1
FROM btc_src_brcinfo e
JOIN tree s ON s.brcid = e.parentbrc
)
SELECT * FROM tree order by path1;
查询显示结果如下: