假设存储在数据库(MS SQL Server)中的树在以下结构中
CREATE TABLE Nodes(
NodeId int PRIMARY KEY,
NodeValue varchar(50));
CREATE TABLE Adjacencies(
ParentId int REFERENCES Nodes(NodeId),
-- every adjacence is unique for specified child node
ChildId int PRIMARY KEY REFERENCES Nodes(NodeId),
Weight int);
现在我们有一个表 Foo ,它使用了这个树中的值(关系多对多)
CREATE TABLE Foo(FooId int PRIMARY KEY);
CREATE TABLE Foo_Nodes(
FooId int REFERENCES Foo(FooId),
NodeId int REFERENCES Nodes(NodeId),
CONSTRAINT PK_Foo_Nodes PRIMARY KEY (FooId,NodeId))
现在对于指定的 FooId ,我们有树节点的子集,(在 FooNodes 表中),我们的任务是从该子集中查找所有“根叶”路径(这个子集不是必需的仍然是树,而是它将是一组子树)。
使用SQL语法有最好的方法吗?
例如,路径{{1,2,3}, {1,4}, {5,6}, {9}}
的结果表可以具有这样的结构
PathId NodeId Level
---------------------------
1 1 1 |
1 2 2 | first path
1 3 3 |
2 1 1 | second path
2 4 2 |
3 5 1 | third path
3 6 2 |
4 9 1 | fourth path
P.S。在命令式语言中,此任务非常明显:我们只需要枚举所有结果子树中的所有“根叶”路径,并将这些路径组合在一起。