2列sqlite数据库中的A-> B-> C关系管理

A->B->C relationship management in a 2 column sqlite database

大家好,在此先感谢您的帮助。

我已经设置了一个通信 table 看起来像这样

Old New
A B
B C
A D
C D

当然这是在多个时间点上一个状态与另一个状态之间对应关系的日志。 我正在尝试通过拉平新旧之间的关系来将这些数据转换为“可用格式”以达到如下目的:

Old New
A D
B D
C D

有人知道如何在 SQL 中做这样的事情吗? 请记住迭代可以 运行 7 层深。 非常感谢

使用递归 CTE:

WITH cte AS (
  SELECT old, new, 1 level FROM tablename
  UNION ALL
  SELECT c.old, t.new, level + 1
  FROM tablename t INNER JOIN cte c
  ON c.new = t.old
)
SELECT DISTINCT old, 
       FIRST_VALUE(new) OVER (PARTITION BY old ORDER BY level DESC) new 
FROM cte
ORDER BY old;

参见demo