我正在尝试选择母产品及其所有儿童产品;如果你愿意的话,会爆炸物料清单(BoM)。这应该是一个足够简单的任务,但我没有得到预期的结果。
SELECT LEVEL,
serial_no,
part_no
FROM ifsapp.part_serial_catalog_tab
START WITH serial_no = 'Serial1'
AND part_no = 'ParentPart'
CONNECT BY PRIOR serial_no = superior_serial_no
AND part_no = superior_part_no;
我希望看到以下结果:
1 Serial1 ParentPart
2 Serial1 ChildPart1
2 Serial2 ChildPart2
..但是,我只返回第一行(Parent)。
注意:该表具有part_no / serial_no的复合键,从该示例中可以看出,父级通常从其中一个子级继承serial_no。我不确定这些问题中的任何一个都会使问题复杂化,但显然会出现问题。
为什么我的查询没有在整个层次结构中向下钻取?
答案 0 :(得分:4)
一位同事帮我解决了问题:
SELECT LEVEL,
serial_no,
part_no
FROM ifsapp.part_serial_catalog_tab
START WITH serial_no = 'Serial1'
AND part_no = 'ParentPart'
CONNECT BY PRIOR serial_no = superior_serial_no
AND PRIOR part_no = superior_part_no;
我见过的所有例子都提到了一个带有简单键的表。使用这样的复合键,是的,我确实需要指定两列之间的关系,但我还需要第二个PRIOR关键字:
CONNECT BY PRIOR serial_no = superior_serial_no
AND PRIOR part_no = superior_part_no;
我的SQL在语法上是正确的,但不是我认为我正在运行的查询!
答案 1 :(得分:1)
我的猜测是,这会将结果限制为仅限第一条记录。
AND part_no = 'ParentPart'