Ove*_*rdQ 6 sql postgresql recursive-query adjacency-list
所以我有一个SQL查询来检索邻接列表中给定节点的所有子节点.
WITH RECURSIVE
q AS
(
SELECT id, name
FROM categories h
WHERE id = 11846801
UNION ALL
SELECT hc.id, hc.name
FROM q
JOIN categories hc
ON hc.parent = q.id
)
SELECT name
FROM q
Run Code Online (Sandbox Code Playgroud)
有没有修改该查询返回我的方式只是节点的最底层?我不能只指定给定的级别,因为每条路径可能有不同的深度.
“从一开始,所有节点都会留下最长的路径。”
一种方法是计算向下的级别,并仅返回底部级别的成员:
WITH RECURSIVE q AS (
SELECT id, name, 0 AS lvl
FROM categories
WHERE id = 11846801
UNION ALL
SELECT c.id, c.name, q.lvl + 1
FROM q
JOIN categories c ON c.parent = q.id
)
SELECT id, name
FROM q
WHERE lvl = (SELECT max(lvl) FROM q);
Run Code Online (Sandbox Code Playgroud)
“全部离开节点。”
WITH RECURSIVE q AS (
SELECT id, name, parent
FROM categories
WHERE id = 11846801
UNION ALL
SELECT c.id, c.name, c.parent
FROM q
JOIN categories c ON c.parent = q.id
)
SELECT id, name
FROM q
WHERE NOT EXISTS (SELECT FROM q q1 WHERE q1.parent = q.id);
Run Code Online (Sandbox Code Playgroud)
检查应该q比基表更快 - 除非 q 很大,在这种情况下主表上的索引可能会更快。
| 归档时间: |
|
| 查看次数: |
884 次 |
| 最近记录: |