【问题标题】:SQLite : with clouse result weirdSQLite:带有子句的结果很奇怪
【发布时间】:2014-06-23 09:05:47
【问题描述】:

现在我可以在我的 android 应用程序中实现 sqlite3 3.8.4.3,我发现了一个很棒的库名称 sqlcipher,:)

现在我再次尝试在 android 应用程序中实现递归函数;

我从“cmd”窗口尝试(递归函数):

我创建一个表:

 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','2','T');
 INSERT INTO tree(id_boss,id_child,answ) VALUES('1','3','F');
 INSERT INTO tree(id_boss,id_child,answ) VALUES('2','P1','T');
 INSERT INTO tree(id_boss,id_child,answ) VALUES('2','4','F');
 INSERT INTO tree(id_boss,id_child,answ) VALUES('3','P2','T');
 INSERT INTO tree(id_boss,id_child,answ) VALUES('3','8','F');

然后我运行一个现在可用于 sqlite 3.8 的递归查询:

 WITH RECURSIVE
 under_alice(name,level) AS (
   VALUES('1','0')
   UNION ALL
   SELECT tree.id_child, under_alice.level+1
     FROM tree, under_alice
    WHERE tree.id_boss=under_alice.name 
    ORDER BY 2 DESC
    )
   SELECT  substr('..........',1,level*3) || name FROM under_alice;

奇怪的结果:

  1
  ...2
  ......4
  ......P1
  ...3
  ......8
  ......P2

为什么选择树的末尾每组的第 2 行值? 如何进行查询,结果应该是这样的?

  1
  ...2
  ......P1
  ......4
  ...3
  ......P2
  ......8

【问题讨论】:

  • 为什么 ORDER BY 按指定列(仅)排序?
  • 我是一个非常没有编程经验的学生,我的英语也不是很好,所以我需要很长时间才能理解每个代码,
  • 有什么办法让它像我想要的那样工作吗?

标签: android recursion sqlite


【解决方案1】:

此查询仅按第 2 列(级别)对记录进行排序。

要指定同一级别的记录顺序,您必须在 ORDER BY 子句中添加适当的列。 在这种情况下,这可能是 id_tree 值,您必须将其添加到 SELECT 子句中才能使用:

WITH RECURSIVE
under_alice(name,level,order_nr) AS (
  VALUES('1','0',0)
  UNION ALL
  SELECT tree.id_child, under_alice.level+1, tree.id_tree
    FROM tree, under_alice
   WHERE tree.id_boss=under_alice.name 
   ORDER BY 2 DESC, 3
)
SELECT substr('..........',1,level*3) || name FROM under_alice;

【讨论】:

猜你喜欢
  • 2014-07-25
  • 2016-05-03
  • 2013-11-03
  • 1970-01-01
  • 2015-09-07
  • 1970-01-01
  • 2018-03-11
  • 2016-10-31
  • 1970-01-01
相关资源
最近更新 更多