DB2 z / OS分层查询

时间:2015-09-15 19:53:27

标签: sql hierarchical-data mainframe zos db2-zos

我有一个包含两列的表,PARENT_PART& CHILD_PART。

如果输入了部件,我需要所有链接的详细信息。该部分的所有子部件都必须在结果中。

Parent part Child part
OABCDEFG01  OABCDEFG02
OABCDEFG01  OABCDEFG03
OABCDEFG02  OABCDEFG04
OABCDEFG02  OABCDEFG05
OABCDEFG03  OABCDEFG06
OABCDEFG03  OABCDEFG07
OABCDEFG03  OABCDEFG08
OABCDEFG04  OABCDEFG09
OABCDEFG04  OABCDEFG10
OABCDEFG05  OABCDEFG11
OABCDEFG05  OABCDEFG12
OABCDEFG06  OABCDEFG13
OABCDEFG07  OABCDEFG14
OABCDEFG07  OABCDEFG15
OABCDEFG07  OABCDEFG16
OABCDEFG07  OABCDEFG17
OABCDEFG08  OABCDEFG18
OABCDEFG08  OABCDEFG19

如上表所示,如果我已经给出了PARENT-PART ='OABCDEFG02'

结果应该如下:

PARENT-PART        CHILD-PART 
OABCDEFG02         OABCDEFG04 
OABCDEFG02         OABCDEFG05 
OABCDEFG04         OABCDEFG09
OABCDEFG04         OABCDEFG10 
OABCDEFG05         OABCDEFG11
OABCDEFG05         OABCDEFG12

我正在使用DB2 for z / OS(大型机系统)。

1 个答案:

答案 0 :(得分:2)

你需要一个所谓的“公用表表达式”。它是一个递归查询,已添加到SQL标准和大多数数据库系统以生成物料清单。我没有DB2 for z / OS可用,无法测试,但这里是指向documentation of common table expressions incl. some examples的链接。

您的查询将如下所示:

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