树选择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_id
和 child_id
不是唯一的。这是一个非 orienteg 图 1 -> 1,2,4 || 2->3 || 3->5以上是关于树选择sqlite [重复]的主要内容,如果未能解决你的问题,请参考以下文章
TypeError:“sqlite3.Cursor”对象不可下标。如何在没有for循环的情况下打印sql选择数据[重复]