【问题标题】:DB2: Recursive QueryDB2:递归查询
【发布时间】:2021-05-28 16:20:20
【问题描述】:

需要帮助。

表:M_Objects

Col:    Id     Child_Id
Row1    M1       M2
Row2    M3       M4
Row3    M2       M5
Row4    M5       M6

当我要求 Id M1 时,我希望在我的查询中得到这些结果,行:1,3,4。 所以对于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
  

【问题讨论】:

    标签: sql recursion db2


    【解决方案1】:

    您正在自上而下地遍历,从 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
    

    【讨论】:

    • 除了右边的字段是ab.ocid
    【解决方案2】:

    好的,谢谢! 是否可以在 first 之前定义一个条件,只在第一次调用而不是每次递归运行?

     SELECT Upp.ID, Upp.CHILD_ID
        FROM M_Objects Upp
        WHERE Upp.ID = 'M1'
    

    【讨论】:

      猜你喜欢
      • 2018-07-16
      • 1970-01-01
      • 2020-12-10
      • 2016-12-05
      • 1970-01-01
      • 1970-01-01
      • 2019-10-30
      • 2012-01-29
      • 2011-04-07
      相关资源
      最近更新 更多