假设在SQL中实现树结构,如下所示:
CREATE TABLE nodes (
id INTEGER PRIMARY KEY,
parent INTEGER -- references nodes(id)
);
Run Code Online (Sandbox Code Playgroud)
尽管可以在此表示中创建循环,但我们假设我们永远不会让这种情况发生.该表只存储一个根集合(父节点为null的记录)及其后代.
目标是,给定表中节点的id,找到作为其后代的所有节点.
阿是的后代乙如果任一个的父是乙或甲的父是的后代乙.注意递归定义.
以下是一些示例数据:
INSERT INTO nodes VALUES (1, NULL);
INSERT INTO nodes VALUES (2, 1);
INSERT INTO nodes VALUES (3, 2);
INSERT INTO nodes VALUES (4, 3);
INSERT INTO nodes VALUES (5, 3);
INSERT INTO nodes VALUES (6, 2);
Run Code Online (Sandbox Code Playgroud)
代表:
1
`-- 2
|-- 3
| |-- 4
| `-- 5
|
`-- …Run Code Online (Sandbox Code Playgroud)