查询以查找同一 table 中代码级别的最新代码

Query to find latest code for code level in same table

我有一个 table,其中每个代码 ID 都引用同一 table 中的另一列,以下是场景

Table: Code

OldCode     NewCode
A           B
B           C
C           D
D           E

我想查询上面的 table 其中 OldCode= A 结果代码应该是 NewCode=E

即:A->BB->CC->DD->E

我想不出查询中的逻辑来实现它,但我们可以通过 dataframe 来实现,但我想通过查询来实现。

我尝试使用 CTE,但我无法理解实现它的递归 CTE 概念。

您可以在此处使用递归 CTE:

WITH RECURSIVE cte(n) AS (
    SELECT OldCode, NewCode, 1 AS lvl FROM yourTable WHERE OldCode = 'A'
    UNION ALL
    SELECT t1.OldCode, t1.NewCode, n + 1
    FROM yourTable t1
    INNER JOIN cte t2 ON t2.NewCode = t1.OldCode
)

SELECT NewCode
FROM cte
ORDER BY lvl DESC
LIMIT 1;

这里的逻辑是在 CTE 的递归步骤中将所有级别连接在一起(这就是 下面 UNION ALL 中出现的内容)。我们还为每个连接计算一个级别,在基本情况下从 1 开始。那么,为了得到我们想要的NewCode,我们只要取level值最高的那条记录即可。