6
我有一个树型结构表,列中有: id,parent,name。 给定一棵树A-> B-> C, 我怎么能根据C的ID得到最顶级的父A的ID? 尤其是如何用“递归”编写SQL? 谢谢!如何获得PostgreSQL中最顶级的父亲
我有一个树型结构表,列中有: id,parent,name。 给定一棵树A-> B-> C, 我怎么能根据C的ID得到最顶级的父A的ID? 尤其是如何用“递归”编写SQL? 谢谢!如何获得PostgreSQL中最顶级的父亲
要实现递归查询,您需要一个Common Table Expression(CTE)。 该查询计算所有父节点的祖先。既然我们只想要最高级别,我们选择level = 0的地方。
WITH RECURSIVE Ancestors AS
(
SELECT id, parent, 0 AS level FROM YourTable WHERE parent IS NULL
UNION ALL
SELECT child.id, child.parent, level+1 FROM YourTable child INNER JOIN
Ancestors p ON p.id=child.parent
)
SELECT * FROM Ancestors WHERE a.level=0 AND a.id=C
如果您想要获取所有数据,请使用ID上的内连接,例如,
SELECT YourTable.* FROM Ancestors a WHERE a.level=0 AND a.id=C
INNER JOIN YourTable ON YourTable.id = a.id
WITH RECURSIVE q AS
(
SELECT m
FROM mytable m
WHERE id = 'C'
UNION ALL
SELECT m
FROM q
JOIN mytable m
ON m.id = q.parent
)
SELECT (m).*
FROM q
WHERE (m).parent IS NULL
我认为这只是直接父和水平。 我在http://pastebin.com/epjG28YW中粘贴了此查询的结果 – 2016-04-20 21:22:06