sql - DB2:递归查询
问题描述
需要帮忙。
表:M_Objects
Col: Id Child_Id
Row1 M1 M2
Row2 M3 M4
Row3 M2 M5
Row4 M5 M6
我想在我的查询中查询这些结果,行:1,3,4 当我要求 Id M1 时。所以对于Id,它应该寻找child-id并去id ...
WITH RPL (oid, ocid) AS
( SELECT Upp.ID, Upp.CHILD_ID
FROM M_ObjectsUpp
WHERE Upp.ID = 'M1'
UNION ALL
SELECT child.ID, child.CHILD_ID
FROM RPL ab, M_Objects child
WHERE CHILD.child_id = ab.oid
)
SELECT *
FROM RPL
解决方案
您正在自上而下地遍历,从 ID 开始,然后使用其 child_id 查找下一个 ID。因此,您必须将递归部分中的 WHERE 更改为:
WITH RPL (oid, ocid) AS
( SELECT Upp.ID, Upp.CHILD_ID
FROM M_Objects Upp
WHERE Upp.ID = 'M1'
UNION ALL
SELECT child.ID, child.CHILD_ID
FROM RPL ab, M_Objects child
WHERE CHILD.id = ab.child_id
)
SELECT *
FROM RPL
推荐阅读
- apiconnect-test-monitor - IBM API Connect 测试和监视器给出无效请求错误
- javascript - TinyMCE——点击上传文件按钮时出现“HTTP Error 404.0 - Not Found”错误
- google-sheets-api - 我如何可以访问电子表格中的多张工作表之一
- forms - 如何在 JSP 表单中一键提交 2 个或多个值
- python - 如何从 tkinter 复选框中删除刻度
- java - 如何让一个grpc客户端调用多个服务器?
- unity3d - 如何从构建设置中删除已删除的场景
- algorithm - 是否有一种算法可以探索网格中的所有单元格,不包括冗余单元格?
- function - 在 Elixir 中,当 lambda 处于闭包中时,如何将 lambda 提取到命名函数?
- php - Laravel Job 立即在浏览器中执行,而不是在后台队列中运行