`
javathinker
  • 浏览: 227577 次
  • 来自: ...
文章分类
社区版块
存档分类
最新评论

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 允许我们选择递归查询所产生的所有行或仅部分行

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics