我有一个简单的sqlite3表,如下所示:
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
发布于 2011-09-17 19:06:58
如果您有幸使用了SQLite 3.8.3或更高版本的,那么您可以使用使用访问递归和非递归CTE

感谢午餐者让我们知道这个SQLite更新。
在3.8.3之前的版本中,SQLite不支持递归CTE(或者根本不支持CTE),因此没有在SQLite中。因为您不知道它有多深,所以不能使用标准的联接技巧来伪造递归的CTE。您必须以艰苦的方式来完成它,并在客户端代码中实现递归:
发布于 2014-03-06 12:27:34
在这个SQLite 2014-02-03发行版3.8.3中增加了对CTE的支持。下面是文档附条款示例:
WITH RECURSIVE
cnt(x) AS (
SELECT 1
UNION ALL
SELECT x+1 FROM cnt
LIMIT 1000000
)
SELECT x FROM cnt;发布于 2018-05-12 13:23:18
这是我能想到的最基本的查询,它生成一个系列,从1,2开始,一直添加1到20。
最基本的系列
WITH b(x,y) AS
(
SELECT 1,2
UNION ALL
SELECT x+ 1, y + 1
FROM b
WHERE x < 20
) SELECT * FROM b;打印
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系列
WITH b(x,y) AS
(
SELECT 0,1
UNION ALL
SELECT y, x + y
FROM b
WHERE x < 10000
) select * FROM b;打印
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|17711https://stackoverflow.com/questions/7456957
复制相似问题