Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用一个查询SQLite选择所有递归值_Sql_Recursion - Fatal编程技术网

使用一个查询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
值。