Oracle CONNECT BY - 仅返回第一级项目

时间:2012-03-14 11:39:43

标签: oracle oracle11g connect-by

我正在尝试选择母产品及其所有儿童产品;如果你愿意的话,会爆炸物料清单(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。我不确定这些问题中的任何一个都会使问题复杂化,但显然会出现问题。

为什么我的查询没有在整个层次结构中向下钻取?

2 个答案:

答案 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'