我有一个表,其中每个代码id都引用到同一表中的另一列,下面是场景
Table: Code
OldCode NewCode
A B
B C
C D
D E
我想查询上表,其中对于OldCode
=A,结果代码应该是NewCode
=E
即:A->B
、B->C
、C->D
、D->E
我想不出用查询中的逻辑来实现它,但我们可以通过dataframe
来实现,但我想通过查询来实现di。
我尝试过使用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
,我们只需取具有最高级别值的记录。