我有如下的数据库表任务。
SELECT _id,name,parentId FROM Task;
_id name parentId
---------- -------------------- ----------
4 Software Development
5 Machine Learning
6 Programing 4
7 Build System 4
8 version control 4
9 Android App Developm 4
10 Udacity Cource 5
11 Mathematics 5
12 skLearn docs 5
13 problem solving 6
14 breakdown 13
15 language 6
16 c 15
17 c++ 15
18 java 15
19 kotlin 15
20 gradle 7
21 bazel 7
22 git 8
23 svn 8
一张表中的所有任务及其子任务都使用_id(主键)和parentId与各自的父任务相关。
例如,任务名称“java”有 _id = 18 和 parentId = 15 表示“java”是 _id = 15 的子任务,即“语言”。
同样,“语言”的 _id = 15 和 parentId = 6 意味着“语言”是 _id = 6 的子任务,即“编程”。
同样的“编程”是“软件开发”的子任务。
而“软件开发”是 null 的子任务。
所以我需要一个查询,它为输入_id = 18(即'java')提供如下输出,输入_id = 18(即'java')是父任务列表,父任务的父...到子任务的顶部。
_id 名称 parentId 4 软件开发 null 6 编程 4 15 语言 6 18 爪哇 15
目前我可以在一个循环中使用 4 个查询来获取这个输出。
SELECT _id,name,parentId FROM task WHERE _id = 18
在下一次迭代中,_id 将是来自上述查询输出的 parentId 的值
这很耗时,所以我们可以为此找到更好的解决方案。