在SQLite中实现某种简单的循环

时间:2014-07-02 22:19:06

标签: sql sqlite loops

我有一个包含以下列的表:id, text, parentid。如果一行是根项目(没有任何父项),那么parentid = 0

我想要做的是找到特定项目的第一个根(根的项目根)的text

以下是一个例子:

SELECT parentid FROM cat WHERE id = 1234 --returns 1120
SELECT parentid FROM cat WHERE id = 1120 --returns 1011
SELECT parentid FROM cat WHERE id = 1011 --returns 0. So this the first root.
SELECT text FROM cat WHERE id = 1011 --returns what I want.

我知道使用循环很容易,但我使用的sqlite并不支持循环。

所以,问题是,有没有办法在sqlite 中实现这一点而不使用任何其他脚本?

1 个答案:

答案 0 :(得分:2)

这种递归CTE将为您提供所需的结果。请注意,CTE仅在最新版本的SQLite中可用,从version 3.8.3

开始
;with cte as (
  select id, parentid, text, 1 level 
  from t where id = 1234
  UNION all
  select t.id, t.parentid, t.text, cte.level + 1 
  from cte inner join t on cte.parentid = t.id 
  where cte.parentid <> 0)
select * from cte where parentid = 0