树选择sqlite [重复]

Posted

技术标签:

【中文标题】树选择sqlite [重复]【英文标题】:Tree select sqlite [duplicate] 【发布时间】: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 级!

【问题讨论】:

【参考方案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

以上是关于树选择sqlite [重复]的主要内容,如果未能解决你的问题,请参考以下文章

TypeError:“sqlite3.Cursor”对象不可下标。如何在没有for循环的情况下打印sql选择数据[重复]

使用内爆在sqlite中插入多行[重复]

两个日期之间的Sqlite比较[重复]

SQlite数据库操作和AsyncTask [重复]

Android Sqlite 根据日期列删除最旧的重复结果

将数据插入SQLite表后如何获取最后一行ID [重复]