Oracle通过 - 仅返回第一级项目连接
-
13-12-2019 - |
题
我正在尝试选择父产品和所有的孩子产品;爆炸材料清单(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'
. 不隶属于 StackOverflow