【发布时间】:2014-08-07 03:23:18
【问题描述】:
假设我有两个 SQL 表:NODES 和 EDGES Nodes 包含与每个节点有关的信息,EDGES 中的每一行包含两个节点之间的有向边。
即
Table EDGES
|edge_id | node_from_id | node_to_id |
| 1 | 1 | 2 |
| 2 | 1 | 3 |
| 3 | 2 | 1 |
| 4 | 3 | 5 |
| 5 | 6 | 10 |
| 6 | 6 | 11 |
| 7 | 7 | 8 |
查询一个节点的所有子节点的表是微不足道的,但是如果我想要一个节点的所有子节点的所有子节点的列表怎么办?或者更好的是创建节点后代树的所有边的列表?请注意,图可能是循环的,并且不是完全连接的。
例如,我想选择节点1的所有后代边:
QUERY Results:
|edge_id | node_from_id | node_to_id |
| 1 | 1 | 2 |
| 2 | 1 | 3 |
| 3 | 2 | 1 |
| 4 | 3 | 5 |
在 SQL 和 SQLite 3.8.3+ 中,我可以使用诸如公用表表达式 (CTE) 之类的东西来执行此操作,并且对此有很多答案。但在 Android 上,我目前仅限于不支持 CTE 的 SQLite 3.4.0。
我可以以编程方式查询树的每一层,但如果可能的话,我更愿意全部在 SQL 中完成。考虑到我的局限性,有没有一种巧妙的方法来实现这一点?
【问题讨论】: