db2 的 递归查询 使用 WITH

RPL 作为一个具有以下三列的虚拟表:

 

表结构 : PID、ID 和 name。

 

 

 

WITH 子句内的第一个 SELECT 语句是初始化表。它只执行一次。它的结果形成虚拟表的初始内容以作为递归的种子。在上面的示例中,种子是 PID 为 8 的一行或多行。


第二个 SELECT 语句执行多次。将种子作为输入(JOIN 中的辅助表)传递给第二个 SELECT 语句以产生下一个行集合。将 JOIN 的结果添加(UNION ALL)到虚拟表的当前内容中,并放回到其中以形成用于下一次传递的输入。只要有行产生,这个过程就会继续。




========


代码:

WITH RPL (PID, ID, name) AS        
(        
SELECT ROOT.PID, ROOT.ID, ROOT.Name        
FROM regr ROOT        
WHERE ROOT.PID = 8   
UNION ALL       
SELECT CHILD.PID, CHILD.ID, CHILD.Name
FROM RPL PARENT, regr CHILD
WHERE PARENT.ID = CHILD.PID
)
SELECT DISTINCT PID, ID, Name        
FROM RPL
ORDER BY PID, ID, Name

虚拟表上最后的 SELECT 允许我们选择递归查询所产生的所有行或仅部分行

 

你可能感兴趣的:(JOIN,db2)