我在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个级别!
答案 0 :(得分:0)
我不确定如何解释你的桌子。每个节点都有一个ID,对;和一个(唯一的)parent_id(指向自己的根节点?)。什么是child_id?难道不能有多个孩子吗?
当处理任意深度的递归结构时,如果树不经常更改,并且查询需要快,请创建一个支持表(例如,“ancestral_closure”),详细说明所有父子关系的闭包:
ancestor_id, child_id
并确保每当基表更改时它都会更新(通过基表递归并为位于另一个下面的每个节点添加一行)。当您需要查找节点的所有父项和/或子项时,请加入ancestral_closure表。我不认为sqlite支持在插入/删除/更新触发器上执行的存储过程,因此必须手动触发更新。
SQL擅长简单关系,而不是任意图形。