MySQL 8中的分层查询…几乎在那里

问题描述 投票:0回答:2

[在MySQL v8中构建层次结构查询,我快要准备好了。我一直在获取数据集的子叶记录。所以基本上我有树视图。我希望能够在树中选择一个点并显示与之关联的所有子记录。我已经做得足够多了,可以展示父母和孩子的关系,但是我似乎无法让孩子展示。这是表中数据的基本示例:

SQL Fiddle

所以,您对我正在使用的数据有了基本了解。如果用户选择显示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;
mysql hierarchical
2个回答
0
投票

根据您的拨弄中的数据,我认为您不需要为此而使用递归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.21.202匹配)。

112.2


0
投票

不需要Demo on SQLFiddle,您的设计允许:

RECURSIVE
© www.soinside.com 2019 - 2024. All rights reserved.