[在MySQL v8中构建层次结构查询,我快要准备好了。我一直在获取数据集的子叶记录。所以基本上我有树视图。我希望能够在树中选择一个点并显示与之关联的所有子记录。我已经做得足够多了,可以展示父母和孩子的关系,但是我似乎无法让孩子展示。这是表中数据的基本示例:
所以,您对我正在使用的数据有了基本了解。如果用户选择显示1.2.2,我希望查询返回1.2.2和1.2.2.1(……依此类推)。我的问题是我只能得到1.2.2,下面什么也没有。我对我的实际数据集使用CTE查询,我能够确定父级关系,但不能确定子级关系。下面是查询。谁能看到我所缺少的东西?
with recursive gso (id, sequence, name, globalSortOrder) as (
select d.id, d.sequence, d.name, d.globalSortOrder
from dataset d
union
select dd.id, dd.sequence, dd.name, dd.globalSortOrder
from dataset dd
inner join gso
on dd.id = gso.id
)
select * from gso
where -->????
order by globalSortOrder;
根据您的拨弄中的数据,我认为您不需要为此而使用递归CTE;您可以只使用RLIKE/REGEXP
:
RLIKE/REGEXP
输出:
SELECT *
FROM dataset
WHERE sequence RLIKE '^1\.2\.2(\.|$)'
ORDER BY sequence
[请注意需要对正则表达式中的id sequence name globalSortOrder
6676 1.2.2 Autonomous Operation 2005
6677 1.2.2.1 Dynamic Updates to Flight Plan 2006
字符进行转义,以使其与任何字符都不匹配(否则.
可以与1.2.2
或1.202
匹配)。
112.2
不需要Demo on SQLFiddle,您的设计允许:
RECURSIVE