DB2中的叶和根记录

时间:2013-08-06 15:52:43

标签: db2

我的情况如下。

在表A中,记录如下。

col1   col2
----   ----
P1     P2                                  
P2     P3                        
P3     P4

现在我想要一个查询来获得如下输出。

col1   col2
----   ----
P1     P4

这意味着P1与P2相连,然后P2与P3相连,然后P3与P4相连。所以我们需要让P1到P4。任何人都可以建议如何在DB2中执行此操作吗?

1 个答案:

答案 0 :(得分:2)

您可以使用递归CTE。

WITH cte (level, col1, col2) AS (
 SELECT 1, col1, col2
 FROM table_a
 WHERE col1='P1'
 UNION ALL
 SELECT cte.level+1, cte.col1, a.col2
 FROM table_a a
 INNER JOIN cte ON cte.col2=a.col1
)
SELECT 
 col1, MAX(col2) as col2, max(level) as level
FROM cte
GROUP BY
 col1
;

SQL Fiddle适用于SQL Server 2012,但DB2的语法与我记忆的相同。

修改

此外,您可以启用分层查询并使用CONNECT BY语法。

WITH cte AS (
SELECT CONNECT_BY_ROOT col1 as col1, col2 as col2
FROM table_a
START WITH col1='P1'
CONNECT BY PRIOR col2 = col1
 )
SELECT col1, MAX(col2) as col2
FROM cte
GROUP BY col1
;

以下SQL Fiddle适用于Oracle,但DB2应该是相同的。