2015-09-15 30 views
0

我有一个包含两列的表PARENT_PART & CHILD_PART。DB2 z/OS分层查询

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

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 z/OS的(主机系统)。

+0

随意再次编辑。请不要删除格式。如果没有数据前面的四个空白,它们都会混合在一起。 –

+0

如果您在将第一个孩子用作父母后停止,或者如果数据在那里,您会继续下去,则不清楚。你能否用你的样本数据和你的输出来澄清一下。您是否也可以包含您正在尝试使用的查询,因为它会提供有关您发现困难的部分的一些想法。 –

回答

1

你需要一个所谓的“公用表表达式”。这是一个递归查询,它被添加到SQL标准和大多数数据库系统中以生成物料清单。我没有DB2 for z/OS availabe并且无法测试,但这里是链接到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 
+0

感谢henrik,在向上面的查询添加深度参数后,它工作正常 –