【问题标题】:Traversing directed cyclic graph in SQLite on Android在 Android 上的 SQLite 中遍历有向循环图
【发布时间】: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 中完成。考虑到我的局限性,有没有一种巧妙的方法来实现这一点?

【问题讨论】:

    标签: android sql sqlite graph


    【解决方案1】:

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

    你必须一步一步地查询孩子。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-08
      • 2011-02-05
      • 2012-01-22
      • 1970-01-01
      • 2012-09-12
      • 1970-01-01
      相关资源
      最近更新 更多