我目前在SQLite中有一个类似于以下内容的表,形成一个树状结构:
+-----+-----------+---------------+
| _id | parent_id | tree_depth |
+=====+===========+===============+
| 1 | 0 | 0 |
| 2 | 1 | (should be 1) |
| 3 | 2 | (should be 2) |
+-----+-----------+---------------+
我的SQLite经验非常有限,而且表非常大,所以我不想手动填写它。是否有可用于更新tree_depth列的查询,以便它正确表示该节点上树的深度?我尝试选择父树的深度并递增,但由于某种原因,它将所有内容都设置为1.
任何建议都将不胜感激。
编辑:我尝试的查询是:
UPDATE table SET tree_depth = (SELECT p.tree_depth FROM table JOIN table p ON p._id=table.parent_id) +1
答案 0 :(得分:0)
您需要recursive CTE来计算每个条目的树深度。 然后,您可以使用此数据查找值以更新:
WITH RECURSIVE depths(id, depth) AS (
SELECT _id, 0
FROM MyTable
WHERE parent_id = 0
UNION ALL
SELECT MyTable._id, depths.depth + 1
FROM MyTable
JOIN depths ON MyTable.parent_id = depths.id
)
UPDATE MyTable
SET tree_depth = (SELECT depth
FROM depths
WHERE depths.id = MyTable._id);
(注意:较旧的Android版本不支持CTE。)
答案 1 :(得分:-1)
请试试?
update table
set a.tree_depth = b.parent_id
如果它没有炒作,请尝试添加它:
FROM table a
INNER JOIN table b
on a._id= b._id