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

标签 oracle oracle11g connect-by

我正在尝试选择一个父产品及其所有子产品;如果愿意的话,可以分解 Material list (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;

我见过的所有示例都引用带有简单键的表。对于这样的复合键,是的,我确实需要指定两列之间的关系,但我还需要第二个 PRIOR 关键字:

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

我的 SQL 在语法上是正确的,但对于我认为正在运行的查询来说不正确!

关于Oracle CONNECT BY - 仅返回第一级项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9701237/

相关文章:

sql - 两个表连接和 Group By 一起工作时出现问题

sql-server - 我可以在SSRS中跨数据源输入 "join"吗?

sql - 分层查询需要拉 child 、 parent 和 sibling

sql - Oracle 中的递归查询

mysql - 计算各种 SQL 数据库(MySQL、Oracle、H2)中两个日期之间的秒数差异

javax.命名.NamingException : Cannot create resource instance

java.sql.SQLException : ORA-12505, TNS:监听器当前不知道连接描述符中给出的 SID

sql - 甲骨文 : Hierarchical Query Connect By

sql - 移动 oracle 列 ID

grails - 将应用程序从mysql迁移到oracle后出现错误