我正在尝试选择父产品和所有的孩子产品;爆炸材料清单(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
.

..但是,我只会返回第一行(父级)。

注意:该表有part_no / serial_no的复合键,并且可以从此示例中看到,父级通常从其中一个子项继承Serial_No。我不确定这些问题中的任何一个都应该使很重要的事情复杂化,但显然出现了问题。

为什么我的查询没有通过完整层次结构钻井?

有帮助吗?

解决方案

一位同事帮助我解决了解决方案:

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;
.

我见过的所有示例都会引用带有简单键的表。使用诸如此类的复合键,是的,我确实需要在两个列之间指定关系,但我也需要第二个先前关键字:

   CONNECT BY PRIOR serial_no = superior_serial_no
   AND PRIOR part_no          = superior_part_no;
.

我的sql在句子上是正确的,但不是因为查询我认为我正在运行!

其他提示

我的猜测是,这仅仅限制了第一个记录的结果。

AND part_no                = 'ParentPart'
.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top