阅读 53

SQLite递归

SQLite递归的用法的一些总结(by yellow3gold)

1.新建表TestTable

CREATE TABLE TestTable (
"ID"  NVARCHAR2(20),
"PARENTID"  NVARCHAR2(20),
"NAME"  NVARCHAR(100),
PRIMARY KEY ("ID")
);

2.插入测试数据

INSERT INTO "TestTable" ("ID", "PARENTID", "NAME") VALUES (101, 1, name101);
INSERT INTO "TestTable" ("ID", "PARENTID", "NAME") VALUES (102, 1, name102);
INSERT INTO "TestTable" ("ID", "PARENTID", "NAME") VALUES (201, 2, name201);
INSERT INTO "TestTable" ("ID", "PARENTID", "NAME") VALUES (301, 3, name301);
INSERT INTO "TestTable" ("ID", "PARENTID", "NAME") VALUES (302, 3, name302);
INSERT INTO "TestTable" ("ID", "PARENTID", "NAME") VALUES (303, 3, name303);
INSERT INTO "TestTable" ("ID", "PARENTID", "NAME") VALUES (10101, 101, name10101);
INSERT INTO "TestTable" ("ID", "PARENTID", "NAME") VALUES (30301, 303, name30301);
INSERT INTO "TestTable" ("ID", "PARENTID", "NAME") VALUES (3010101, 30301, name3010101);
INSERT INTO "TestTable" ("ID", "PARENTID", "NAME") VALUES (301010101, 3010101, name301010101);
INSERT INTO "TestTable" ("ID", "PARENTID", "NAME") VALUES (1010101, 10101, name1010101);

3.根据父ID(parentid)获取所有子ID

SELECT * FROM (WITH RECURSIVE
GETID(N) AS (
VALUES(3)
UNION
SELECT ID FROM TESTTABLE ORG, GETID
WHERE ORG.PARENTID=GETID.N
)
SELECT ID ,PARENTID, NAME FROM TESTTABLE ORG
WHERE ORG.PARENTID IN GETID)

 

 3.根据ID获取所有父ID(parentid)

SELECT * FROM (WITH RECURSIVE
GETID(N) AS (
VALUES(301010101)
UNION
SELECT PARENTID FROM TESTTABLE ORG, GETID
WHERE ORG.ID=GETID.N
)
SELECT ID ,PARENTID, NAME FROM TESTTABLE ORG
WHERE ORG.ID IN GETID)

 

原文:https://www.cnblogs.com/yellow3gold/p/15232765.html

文章分类
代码人生
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐