sqlite3上的基本递归查询?

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

表格:零件
部分超部分
wk0Z wk00
wk06 wk02
wk07 wk02
eZ01 eZ00
eZ02 eZ00
eZ03 eZ01
eZ04 eZ01

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

我知道还有其他定义表格的方法,但我在这里别无选择。
我知道如果我知道我的树有多深,我可以使用几个联合体,但我不知道我想去多深。
使用递归,甚至只使用(,)作为x会有所帮助,但就我搜索的内容而言,这在sqlite中是不可能的,对吗

有没有办法在sqlite3中执行此递归查询

更新:

当提出这个问题时,SQLite不支持递归查询,但正如@lunicon所述,SQLite现在支持递归CTE,因为3.8.3 SQLite.org/lang_with.html

如果您有幸使用SQLite3.8.3或更高版本,那么您确实可以使用以下工具访问递归和非递归CTE:

感谢lunicon让我们了解此SQLite更新


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

  • 获取初始行和子零件ID
  • 获取子零件的行和子零件ID
  • 重复,直到什么都没有回来

发表评论