假设我有两个SQL表:NODES和EDGES 节点包含与每个节点有关的信息,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)的方法来执行此操作,并且SO上有很多答案。但在Android上,我目前仅限于SQLite 3.4.0,它不支持CTE。
我可以通过编程方式查询树的每个级别,但如果可能的话,我更愿意在SQL中执行此操作。鉴于我的局限,有没有一种巧妙的方法来实现这一目标?
答案 0 :(得分:0)
CTE存在是因为没有其他方法可以进行递归查询。
您必须逐步查询孩子。