Sql 选择通过其值连接的关键点

Sql 选择通过其值连接的关键点,sql,mariadb,graph-theory,graph-algorithm,recursive-query,Sql,Mariadb,Graph Theory,Graph Algorithm,Recursive Query,我有两列,比如键和值。 我需要关于值之间连接的组键,如图所示。相同的值连接关键点。 我不知道怎么做。使用10.5.8-MariaDB。这是一个典型的图形漫游问题-需要递归查询,可从MariaDB 10.2.2开始使用 这里有一种方法,首先将边构建为连接节点的元组,然后迭代遍历数据集,跟踪已访问的节点。我们可以通过跟踪访问量最小的节点来识别每个节点所属的组 with recursive edges as ( select t1.lagr_number as lagr_nu

我有两列,比如键和值。 我需要关于值之间连接的组键,如图所示。相同的值连接关键点。
我不知道怎么做。使用10.5.8-MariaDB。

这是一个典型的图形漫游问题-需要递归查询,可从MariaDB 10.2.2开始使用

这里有一种方法,首先将边构建为连接节点的元组,然后迭代遍历数据集,跟踪已访问的节点。我们可以通过跟踪访问量最小的节点来识别每个节点所属的组

with recursive 
    edges as (
        select t1.lagr_number as lagr_number1, t2.lagr_number as lagr_number2
        from mytable t1
        inner join mytable t2 on t2.ltran_number = t1.ltran_number
    ),
    cte as (
        select lagr_number1, lagr_number2, concat(lagr_number1, ',', lagr_number2) as visited
        from edges
        union all
        select c.lagr_number1, e.lagr_number2, concat(c.visited, ',', e.lagr_number2)
        from cte c
        inner join edges e on e.lagr_number1 = c.lagr_number2
        where not find_in_set(e.lagr_number2, c.visited)
    )
select lagr_number1 as lagr_number, dense_rank() over(order by min(lagr_number2)) as grp
from cte
group by lagr_number1
order by grp, lagr_number1

样本数据:

lagr_number | ltran_number :---------- | :----------- K000001 | V000001 K000001 | V000004 K000001 | V000005 K000002 | V000001 K000003 | V000002 K000003 | V000003 K000004 | V000005 K000005 | V000007 K000005 | V000008 K000006 | V000009 K000007 | V000009 lagr|U编号| ltran|U编号 :---------- | :----------- K000001 | V00001 K000001 | V00004 K000001 | V00005 K000002 | V00001 K000003 | V00002 K000003 | V00003 K000004 | V00005 K000005 | V00007 K000005 | V00008 K000006 | V00009 K000007 | V00009 结果:

lagr_number | grp :---------- | --: K000001 | 1 K000002 | 1 K000004 | 1 K000003 | 2 K000005 | 3 K000006 | 4 K000007 | 4 lagr|U编号| grp :---------- | --: K000001 | 1 K000002 | 1 K000004 | 1 K000003 | 2 K000005 | 3 K000006 | 4 K000007 | 4