SQLite递归CTE向上查询层级:获取Alice到根节点的指挥链示例
Got it!要实现从Alice向上追溯到根节点(boss为null)的指挥链,只需要反转递归查询的方向,从子节点往父节点找就行。
反向查询树形结构的指挥链(从Alice到根节点)
先确认下咱们的表结构:
CREATE TABLE org( name TEXT PRIMARY KEY, boss TEXT REFERENCES org );
要获取从Alice向上到boss为null的根节点的完整指挥链,直接用下面的递归查询即可,结果就是纯指挥链列表:
WITH RECURSIVE alice_chain(n) AS ( -- 起始点:Alice VALUES('Alice') UNION -- 递归向上找上级boss,直到boss为null停止 SELECT org.boss FROM org JOIN alice_chain ON org.name = alice_chain.n WHERE org.boss IS NOT NULL ) SELECT n AS command_chain FROM alice_chain;
简单解释下逻辑:
- 初始递归部分先把Alice作为起始节点;
- 递归环节通过关联当前节点的
name和上级的boss字段,一步步向上找,org.boss IS NOT NULL这个条件会让递归在根节点处停止(因为根节点没有上级,boss为null,不会被选中); - 最后直接输出递归结果,就是从Alice到根节点的指挥链顺序。
内容的提问来源于stack exchange,提问作者turbo
相关产品推荐
相关产品推荐

