首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sqlite3上的基本递归查询?

sqlite3上的基本递归查询?
EN

Stack Overflow用户
提问于 2011-09-17 18:34:32
回答 5查看 44.6K关注 0票数 47

我有一个简单的sqlite3表,如下所示:

代码语言:javascript
复制
Table: Part
Part    SuperPart
wk0Z    wk00
wk06    wk02
wk07    wk02
eZ01    eZ00
eZ02    eZ00
eZ03    eZ01
eZ04    eZ01

我需要运行一个递归查询来查找给定SuperPart的所有对及其所有subParts。假设我有eZ00。eZ00是eZ01的超级部分,eZ01是eZ03的超部分。结果必须不仅包括对(eZ00、eZ01)和(eZ01和eZ03),而且还必须包括对(eZ00、eZ03)。

我知道还有其他方法来定义这张桌子,但我在这里别无选择。我知道,如果我知道我的树的深度,我可以使用几个联盟,但我不会永远知道我想要达到多深。使用递归的方式,甚至只使用(,,)作为x是有帮助的,但对于我所搜索的内容,这在sqlite中是不可能的,对吗?

有办法在sqlite3中执行这个递归查询吗?

更新:

当提出这个问题时,SQLite不支持递归查询,但是如@lun图标所述、SQLite现在支持自3.8.3 with.html以来的递归CTE

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-09-17 19:06:58

如果您有幸使用了SQLite 3.8.3或更高版本的,那么您可以使用使用访问递归和非递归CTE

感谢午餐者让我们知道这个SQLite更新。

在3.8.3之前的版本中,SQLite不支持递归CTE(或者根本不支持CTE),因此没有在SQLite中。因为您不知道它有多深,所以不能使用标准的联接技巧来伪造递归的CTE。您必须以艰苦的方式来完成它,并在客户端代码中实现递归:

  • 获取初始行和子部分ID。
  • 抓取子部件的行和子部件ID。
  • 重复,直到什么都没有回来。
票数 46
EN

Stack Overflow用户

发布于 2014-03-06 12:27:34

在这个SQLite 2014-02-03发行版3.8.3中增加了对CTE的支持。下面是文档附条款示例:

代码语言:javascript
复制
WITH RECURSIVE
cnt(x) AS (
 SELECT 1
 UNION ALL
 SELECT x+1 FROM cnt
  LIMIT 1000000
)
SELECT x FROM cnt;
票数 17
EN

Stack Overflow用户

发布于 2018-05-12 13:23:18

这是我能想到的最基本的查询,它生成一个系列,从1,2开始,一直添加1到20。

最基本的系列

代码语言:javascript
复制
WITH b(x,y) AS 
(
    SELECT 1,2 
    UNION ALL 
    SELECT x+ 1, y + 1 
    FROM b 
    WHERE x < 20
) SELECT * FROM b;

打印

代码语言:javascript
复制
1|2
2|3
3|4
4|5
5|6
6|7
7|8
8|9
9|10
10|11
11|12
12|13
13|14
14|15
15|16
16|17
17|18
18|19
19|20
20|21

下面是另一个简单的例子,它生成斐波纳契数,我们从a= 0,b=1开始,然后再去a= b,b=a+b,就像在任何编程语言中所做的那样

Fibonacci系列

代码语言:javascript
复制
WITH b(x,y) AS 
(
    SELECT 0,1 
    UNION ALL 
    SELECT y, x + y 
    FROM b 
    WHERE x < 10000
) select * FROM b;

打印

代码语言:javascript
复制
0|1
1|1
1|2
2|3
3|5
5|8
8|13
13|21
21|34
34|55
55|89
89|144
144|233
233|377
377|610
610|987
987|1597
1597|2584
2584|4181
4181|6765
6765|10946
10946|17711
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7456957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档