我有一个包含以下列的表: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
中实现这一点而不使用任何其他脚本?
答案 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