DB2 z/OS 分层查询
Posted
技术标签:
【中文标题】DB2 z/OS 分层查询【英文标题】:DB2 z/OS hierarchical queries 【发布时间】:2015-09-15 19:53:26 【问题描述】:我有一个包含两列的表,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】:为此,您需要一个所谓的“公用表表达式”。它是一种递归查询,已添加到 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
【讨论】:
感谢 henrik,将深度参数添加到上述查询后,它工作正常 嗨,muralikrishna,您还有关于深度参数的查询吗?以上是关于DB2 z/OS 分层查询的主要内容,如果未能解决你的问题,请参考以下文章
使用 like 谓词(模式匹配)对 DB2 Z/oS 的 SQL 查询进行性能调优