sqlite - 选择特定值 SQLite

标签 sqlite

我有一个问题,我正在使用 sqlite,

首先我创建了一个表:

 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
 ancestor(id) AS (
  VALUES('P3')
  UNION ALL
  SELECT tree.id_boss
  FROM tree JOIN ancestor ON tree.id_child = ancestor.id
  )
 SELECT id FROM ancestor;

结果是:

  P3
  2
  8
  1

我的问题是,如何进行查询以选择“T”值中的 id_boss 并忽略“F”中的所有值?

结果应该是这样的:

  P3
  1

最佳答案

您无法从 CTE 内部过滤掉 F 记录,因为这会破坏树中的连接。 相反,您必须返回 answ 值,并在第二步中将它们用作过滤器:

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';

关于sqlite - 选择特定值 SQLite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23710861/

相关文章:

iphone - sqlite3_prepare_v2失败(Xcode sqlite 3)

android - 使用 insertWithOnConflict 进行更新或插入

ios - 从崩溃的iOS应用中获取数据库

sqlite - 通过 npm 获取插件 "cordova-sqlite-storage@1.0.6"无法获取插件 cordova-sqlite-storage

mysql - 如何将 INTERSECT 从 SQLite 转换为 MySQL

sqlite - 使用 SyncAdapter 在 Android 上进行双向同步

java - Sqlite数据库更新一行android

c# - 在执行 ISQLQuery.UniqueResult<DateTime>() 时,如何让 SQLite 返回正确的 DateTime?

json - python 3 : deserialize nested dictionaries from sqlite

database-design - 如何避免嵌套事务