通過With AS語法進(jìn)行深度查詢曹阔,得到類似樹狀結(jié)構(gòu)的查詢結(jié)果
假定周公子名下18家公司的關(guān)系為:甲公司(一級公司)--甲a公司(甲公司的子公司)--甲a1公司(甲a公司的子公司)
現(xiàn)有公司存儲結(jié)構(gòu)如下
公司數(shù)據(jù)存儲結(jié)構(gòu).png
現(xiàn)在的需求是按照深度進(jìn)行公司查詢,及查詢結(jié)果為
甲公司--甲x公司-甲xN公司业汰;
乙公司……
如下圖:
深度查詢結(jié)果.png
查詢方式:
WITH cte AS (
SELECT *,NULL AS parent_name from CORP WHERE parent_id ISNULL
UNION ALL
SELECT sub.*,ct.corp_name AS parent_name FROM CORP sub INNER JOIN cte ct ON sub.parent_id = ct.corp_id order by level_no DESC
)SELECT * FROM cte
附建表sql:
CREATE TABLE IF NOT EXISTS CORP (ID INTEGER PRIMARY KEY AUTOINCREMENT,corp_name TEXT,corp_id INTEGER,parent_id INTEGER,level_name TEXT,level_no INTEGER);
INSERT INTO CORP VALUES (1,'甲公司',1000,NULL,'一級公司',1);
INSERT INTO CORP VALUES (2,'甲a公司',1100,1000,'二級公司',2);
INSERT INTO CORP VALUES (3,'甲b公司',1200,1000,'二級公司',2);
INSERT INTO CORP VALUES (4,'乙公司',2000,NULL,'一級公司',1);
INSERT INTO CORP VALUES (5,'丙公司',3000,NULL,'一級公司',1);
INSERT INTO CORP VALUES (6,'甲a1公司',1110,1100,'三級公司',3);
INSERT INTO CORP VALUES (7,'甲a2公司',1120,1100,'三級公司',3);
INSERT INTO CORP VALUES (8,'甲a3公司',1130,1100,'三級公司',3);
INSERT INTO CORP VALUES (9,'甲b1公司',1210,1200,'三級公司',3);
INSERT INTO CORP VALUES (10,'甲b2公司',1220,1200,'三級公司',3);
INSERT INTO CORP VALUES (11,'乙a公司',2100,2000,'二級公司',2);
INSERT INTO CORP VALUES (12,'乙b公司',2200,2000,'二級公司',2);
INSERT INTO CORP VALUES (13,'丙a公司',3100,3000,'二級公司',2);
INSERT INTO CORP VALUES (14,'丙a1公司',3110,3100,'三級公司',3);
INSERT INTO CORP VALUES (15,'乙b1公司',2210,2200,'三級公司',3);
INSERT INTO CORP VALUES (16,'乙b2公司',2220,2200,'三級公司',3);
INSERT INTO CORP VALUES (17,'甲c公司',1300,1000,'二級公司',2);
INSERT INTO CORP VALUES (18,'甲c1公司',1310,1300,'三級公司',3);