SQLite深度查询

通过With AS语法进行深度查询,得到类似树状结构的查询结果
假定周公子名下18家公司的关系为:甲公司(一级公司)--甲a公司(甲公司的子公司)--甲a1公司(甲a公司的子公司)
现有公司存储结构如下


公司数据存储结构.png

现在的需求是按照深度进行公司查询,及查询结果为
甲公司--甲x公司-甲xN公司;
乙公司……
如下图:


深度查询结果.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);

你可能感兴趣的:(SQLite深度查询)