使用一个查询SQLite选择所有递归值
我还有另外一个例子: 首先,我创建了一个表:使用一个查询SQLite选择所有递归值,sql,recursion,Sql,Recursion,我还有另外一个例子: 首先,我创建了一个表: CREATE TABLE tree( id_tree integer PRIMARY KEY AUTOINCREMENT, id_boss TEXT, id_child TEXT, answ TEXT); 插入一些值: INSERT INTO tree(id_boss,id_child,answ) VALUES('1','8','T'); INSERT INTO tree(id_boss,id_chil
CREATE TABLE tree(
id_tree integer PRIMARY KEY AUTOINCREMENT,
id_boss TEXT,
id_child TEXT,
answ TEXT);
插入一些值:
INSERT INTO tree(id_boss,id_child,answ) VALUES('1','8','T');
INSERT INTO tree(id_boss,id_child,answ) VALUES('1',null,'F');
INSERT INTO tree(id_boss,id_child,answ) VALUES('8','P1','T');
INSERT INTO tree(id_boss,id_child,answ) VALUES('8','2','F');
INSERT INTO tree(id_boss,id_child,answ) VALUES('2','P2','T');
INSERT INTO tree(id_boss,id_child,answ) VALUES('2','P3','F');
并执行查询:
WITH RECURSIVE
ancestors(id, answ) AS (
VALUES('P3', 'T')
UNION ALL
SELECT tree.id_boss, tree.answ
FROM tree JOIN ancestors ON tree.id_child = ancestors.id
)
SELECT id FROM ancestors WHERE answ = 'T';
结果是:
P3
1
对于P3
,我想列出所有递归值,因此如下所示:
1 --- // P3
1 --- // P1
8 --- // P1
2 --- // P2
1 --- // P2
这离你要找的地方近吗
WITH seed (id, answ) as ( VALUES('P3', 'T') )
, ancestors1(id, answ) AS (
select * from seed
UNION ALL
SELECT tree.id_boss, tree.answ
FROM tree, ancestors1 where tree.id_child = ancestors1.id
)
, ancestors2(id, answ) AS (
select * from seed
UNION ALL
SELECT tree.id_boss, tree.answ
FROM tree, ancestors2 where tree.id_child = ancestors2.id
)
select id from (
select * from ancestors1
union all
select * from ancestors2
);
我必须重新表述某些内容,以便让THNM使用db2进行编译(删除递归,并使用隐式连接)对不起,这不起作用,我想选择所有递归=
P1
,P2
,P3
,而不仅仅是P3
值。