在Android上的SQLite中遍历有向循环图

时间:2014-08-06 18:04:08

标签: android sql sqlite graph

假设我有两个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中执行此操作。鉴于我的局限,有没有一种巧妙的方法来实现这一目标?

1 个答案:

答案 0 :(得分:0)

CTE存在是因为没有其他方法可以进行递归查询。

您必须逐步查询孩子。