【问题标题】:heirarchical query with CONNECT_BY_ROOT with join on DB2/400在 DB2/400 上使用 CONNECT_BY_ROOT 进行分层查询
【发布时间】:2021-01-12 14:54:24
【问题描述】:

我想遍历包含程序和表的递归列表的表,以查找特定程序 MYPGM 及其子程序使用的所有程序和表。到目前为止,这是可行的:

 SELECT CONNECT_BY_ROOT WHONAM AS TOP_LEVEL, WHONAM AS REF_A, 
 WHRNAM AS REF_B, 
 WHRTYP AS Obj_Type, WHRATR OBJ_ATTTR, WHUSG AS USAGE, 
 LEVEL WHONAM 
 FROM MYLIB/MYREF 
 START WITH WHONAM = 'MYPGM' 
 CONNECT BY PRIOR WHRNAM = WHONAM                               

现在我想对 table.field MYLIST.MY_PGM_NAME 中的所有程序执行相同的操作,而不仅仅是程序“MYPGM”。我在合并 JOIN 子句时遇到问题,不知道如何处理 START WITH 子句。希望我很清楚。

谢谢,

【问题讨论】:

    标签: sql db2 ibm-midrange db2-400


    【解决方案1】:

    考虑使用 SQL 标准语法进行递归。此处的 Db2 for i 手册中有一个物料清单示例https://www.ibm.com/support/knowledgecenter/en/ssw_ibm_i_72/db2/rbafzrecurse.htm

     WITH RPL (PART, SUBPART, QUANTITY) AS
        (  SELECT ROOT.PART, ROOT.SUBPART, ROOT.QUANTITY
              FROM PARTLIST ROOT
              WHERE ROOT.PART = '01'
          UNION ALL
           SELECT CHILD.PART, CHILD.SUBPART, CHILD.QUANTITY
              FROM RPL PARENT, PARTLIST CHILD
              WHERE PARENT.SUBPART = CHILD.PART
         )
     SELECT DISTINCT PART, SUBPART, QUANTITY
     FROM RPL
     ORDER BY PART, SUBPART, QUANTITY
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-27
      • 1970-01-01
      • 2019-02-25
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多