db2 的 递归查询 使用 WITH
2009-08-13 13:53
337 查看
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 允许我们选择递归查询所产生的所有行或仅部分行
表结构 : 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 允许我们选择递归查询所产生的所有行或仅部分行
相关文章推荐
- DB2 公共表表达式(WITH语句的使用)
- db2中关于递归(with)的使用--合并行列
- db2中关于递归(with)的使用
- 使用DB2的with as 语句 实现树的递归查询
- db2关于with递归使用
- DB2 公共表表达式(WITH语句的使用)
- oracle 使用 START WITH…CONNECT BY PRIOR 实现递归查询
- with 递归查询使用简记
- 使用initWithFrame生成的UIView,backgroundColor默认的opaque是0
- with与树查询的使用
- Oracle start with用法实例之根据当前部门id递归查询该部门及子部门信息实例
- TSQL--使用CTE完成递归查询
- 在DB2中使用EXPORT实现将数据导出文本文件
- Working with Docbook on Windows 在Windows下使用Docbook
- DB2使用笔记--生成存储过程ID
- 使用PHP创建一个REST API(Create a REST API with PHP)
- 浅谈oracle,db2 错误工具使用
- 使用try-with-resources自动释放资源
- UIImage imageWithName:的使用优劣