我的情况如下。
在表A中,记录如下。
col1 col2
---- ----
P1 P2
P2 P3
P3 P4
现在我想要一个查询来获得如下输出。
col1 col2
---- ----
P1 P4
这意味着P1与P2相连,然后P2与P3相连,然后P3与P4相连。所以我们需要让P1到P4。任何人都可以建议如何在DB2中执行此操作吗?
答案 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应该是相同的。