数据库树状查询
- SQL Server 树状查询
-- 创建临时表或者使用CTE
WITH OrganizationTree AS (-- 定义递归的终止条件SELECT id, parent_id, name, 1 AS LevelFROM org_structureWHERE parent_id IS NULLUNION ALL-- 定义递归部分,这里的Level是为了记录树的层级SELECT o.id, o.parent_id, o.name, Level + 1FROM org_structureoINNER JOIN OrganizationTree ot ON o.parent_id = ot.id
)
-- 查询整个树
SELECT * FROM OrganizationTree;
- Oracle 树状查询
SELECT id, parent_id, name
FROM org_structure
START WITH parent_id IS NULL
CONNECT BY PRIOR id = parent_id;
CONNECT BY子句指定了递归的连接条件,即每一行的id必须等于下一行的parent_id。PRIOR关键字表示上一个节点,所以CONNECT BY PRIOR id = parent_id表示这是一个向下的递归查询。