Sqlite 选择物化路径中具有ID的所有行
我有一个带有物化路径列(matpath)的树结构表。 数据如下所示:Sqlite 选择物化路径中具有ID的所有行,sqlite,select,materialized-path-pattern,Sqlite,Select,Materialized Path Pattern,我有一个带有物化路径列(matpath)的树结构表。 数据如下所示: ID MATPATH PARENT --------------------- 1 NULL NULL 2 1. 1 3 1.2. 2 4 1.2.3. 3 5 1.2. 2 6 1.2.3.4. 4 7 1.2.5. 5 等 给定ID,如何获取高于(一个查询)或低于(另一个查询)的所有
ID MATPATH PARENT
---------------------
1 NULL NULL
2 1. 1
3 1.2. 2
4 1.2.3. 3
5 1.2. 2
6 1.2.3.4. 4
7 1.2.5. 5
等
给定ID,如何获取高于(一个查询)或低于(另一个查询)的所有元素?
例如,如果ID为7,我想在7之外选择ID为1、2和5的行。
如果给定ID为3,请选择1、2和3。等等
谢谢。首先,您必须决定是否希望在物化路径上使用尾随
,我假设您确实希望使用它们,因为这样会使生活更轻松
类似这样的操作将获得以下节点:
select id
from tree
where matpath like (
select matpath || id || '.%'
from tree
where id = X
)
其中X
是您感兴趣的节点。您的树如下所示:
ID MATPATH PARENT
---------------------
1 NULL NULL
2 1. 1
3 1.2. 2
4 1.2.3. 3
5 1.2. 2
6 1.2.3.4. 4
7 1.2.5. 5
1--2-+-3--4--6
|
+- 5 --- 7
使用几个值应用上述查询与图表匹配:
X | output
--+--------------
3 | 4, 6
7 |
2 | 3, 4, 5, 6, 7
在客户机中,获取给定节点上方的节点更容易:只需抓取路径,切掉尾随的
,然后分割剩余的
。SQLite的字符串处理支持相当有限,我想不出一种方法来拆分具体化的路径,而不尝试添加一个用户定义的split
函数(我不确定是否可以添加适当的split
)
所以在数据库外进行两次查询和一点字符串争论可以得到您想要的结果。好的,我希望有一个one查询解决所有问题的解决方案,我没有看到。非常感谢。