我有數據庫表任務如下。查詢樹中的父母
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意味着'language'是_id = 6的子任務,它是'編程'。
同樣的'程序'是'軟件開發'的子任務。
而'軟件開發'是空的子任務。
所以我需要一個查詢,其輸出如下輸出_id = 18(即'java'),它是父任務的父母,父任務的父母...到子任務的頂部。
_id name parentId 4 Software Development null 6 Programing 4 15 language 6 18 java 15
目前,我可以在一個循環中使用4個查詢來獲取這個輸出。
SELECT _id,name,parentId FROM task WHERE _id = 18
在下一迭代_id將是從上述查詢
這是耗時的,所以我們可以對這個更好的解決方案的輸出的parentId的值。
答案是CTE(公用表表達式)。查看WITH語句。 https://sqlite.org/lang_with.html這是查詢SQL中樹結構的常用方法(基本上就是你所擁有的) –
https://en.wikipedia.org/wiki/Hierarchical_and_recursive_queries_in_SQL –