假设我有一些树形数据:
- A A
- A0 A/A0
- A0.0 A/A0/A0.0
- A0.1 A/A0/A0.1
- A1 A/A1
- A1.0 A/A1/A1.0
- A1.1 A/A1/A1.1
- A2 A/A2
这些数据存储在postgresql数据库“tree-data”中,其中有一个名为“id”的列,它是节点路径(如上所示),还有一些辅助列,如'depth'(整数,表示树中节点的深度)和'terminal'(布尔值,是叶子节点且没有子节点)。
现在我想要实现的是查询“A / A0 / A0.0”,以检索所有父节点及其第一层子节点。
获取所有父节点很容易:
SELECT name, id, depth, terminal
FROM "tree-data"
WHERE 'A/A0/A0.0' LIKE id||'%'
ORDER BY id;
这将返回以下节点:
A
A/A0
A/A0/A0.0
但这正是我需要的:
A
A/A0
A/A0/A0.0
A/A0/A0.1
A/A1
A/A2
你能想到一种简单高效的方法来实现这个吗?虽然可以优化/修改模式,但并不是首选。