【问题标题】:Tree select sqlite [duplicate]树选择sqlite [重复]
【发布时间】:2015-10-19 12:24:11
【问题描述】:

我在 android 中使用 sqlite,需要进行选择以获取所有父母和他们孩子的,例如:

id || parent_id || child_id || name

1     1            1           jhon
2     1            2           helen
3     2            3           barack
4     1            4           manuel
5     3            5           gaga

结果应该是:

jhon
helen
manuel
barack
gaga

所以,我需要一个 reqursive sql,但谷歌搜索了一下,我发现 CTE 是 sqlite 支持的not,无论如何,我什至可以使用递归 java 方法来返回 按父 asc 排序的选定名称列表

请注意,树的深度可以超过 2 级!

【问题讨论】:

    标签: android sqlite recursion tree


    【解决方案1】:

    我不确定如何解释您的表格。每个节点都有一个ID,对吧;和一个(唯一的)parent_id(为根节点指向自身?)。 child_id 是什么?不能有多个孩子吗?

    在处理任意深度的递归结构时,如果树不经常更改,并且查询需要快速,则创建一个支持表(例如,“ancestral_closure”),详细说明所有父子关系的关闭:

    ancestor_id, child_id
    

    并确保在基表更改时更新它(通过基表递归并为位于另一个节点下方的每个节点添加一行)。当您需要查找节点的所有父节点和/或子节点时,加入 ancestral_closure 表。我认为 sqlite 不支持在插入/删除/更新触发器上执行的存储过程,因此必须手动触发更新。

    SQL 擅长简单的关系,而不是任意图。

    【讨论】:

    • id 是主键自动增量,但 parent_idchild_id 不是唯一的。这是一个非 orienteg 图 1 -> 1,2,4 || 2->3 || 3->5
    猜你喜欢
    • 2016-02-27
    • 2014-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    • 1970-01-01
    • 2015-12-09
    相关资源
    最近更新 更多