SQL递归criss跨层次结构

问题描述

我有一个如下所示的数据集:

+---------+---------+---------+
| ColumnA | ColumnB | ColumnC |
+---------+---------+---------+
| 2964    | 12814   | 4       |
| 0001    | 0002    | 0       |
| 7745    | 2964    | 0       |
| 0003    | 0004    | 0       |
| 0002    | 0005    | 6       |
| 12986   | 7745    | 0       |
+---------+---------+---------+

基本上,我想要的输出是:

+---------+---------+---------+
| ColumnA | ColumnB | ColumnC |
+---------+---------+---------+
| 12986   | 12814   | 4       |
+---------+---------+---------+

因此,本质上是:

在12745上加入12986 JOIN,然后在2964上加入JOIN,以获得12814。其中ColumnC包含一个值> 0。

我可以做上面的事情,但是我的数据集可以达到数百万个。这样最终将导致太多的连接。我已经尝试过使用HANA的hierarchy_descendants函数。但是我仍然没有得到理想的结果。我确实获得了级别,但是我想使用ColumnA中的ID来获取columnB的相关ID,其中COLUMN

任何帮助将不胜感激。

谢谢。

更新

我知道我标记 sql Server Hana ,但认为如果同时包含这两个标签,我可以获得更多解决方案。就所需的结果而言,请参见以下内容

    +---------+---------+---------+
    | ColumnA | ColumnB | ColumnC |
    +---------+---------+---------+
    | 12986   | 12814   | 4       |
    | 0001    |  0005   | 6       |
    +---------+---------+---------+

所以我们必须双向走。

解决方法

如果您使用SQL Server作为DBMS,则可以使用这样的递归CTE(公用表表达式),以使所需的行通过ColumnA和{ {1}}:

ColumnB

Demo