Pregunta

Estoy tratando de seleccionar un producto para padres y todos los productos infantiles;explote la factura de materiales (BOM), si lo desea.Esta debería ser una tarea bastante simple, pero no recibo el resultado esperado.

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;

Espero ver los siguientes resultados:

1 Serial1 ParentPart
2 Serial1 ChildPart1
2 Serial2 ChildPart2

.. Sin embargo, solo estoy recibiendo la primera fila (padre) devuelta.

Nota: la tabla tiene una clave compuesta de PTP_NO / Serial_NO, y como puede ver en este ejemplo, el padre generalmente hereda el Serial_No de uno de los niños.No estoy seguro de que ninguno de estos problemas debería complicar mucho, pero claramente algo va mal.

¿Por qué mi consulta no está perforando a través de la jerarquía completa?

¿Fue útil?

Solución

Un colega me ha ayudado a la solución:

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;

Todos los ejemplos que he visto referirse a las tablas con una clave simple.Con una clave compuesta, como esta, sí, necesito especificar una relación entre ambas columnas, sino que también necesito la segunda palabra clave anterior:

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

Mi SQL fue sin forma correcta, pero no para la consulta, pensé que estaba corriendo!

Otros consejos

Mi conjetura es que esto restringe el resultado para solo el primer registro.

AND part_no                = 'ParentPart'

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top