Oracle CONNECT BY - только возвращающий элемент первого уровня - PullRequest
2 голосов
/ 14 марта 2012

Я пытаюсь выбрать родительский продукт и все его дочерние продукты;взорвите Билл материалов, если хотите.Это должно быть достаточно простой задачей, но я не получаю ожидаемого результата.

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 ]

4 голосов
/ 14 марта 2012

Коллега помог мне с решением:

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 голос
/ 14 марта 2012

Я предполагаю, что это ограничивает результат только первой записью.

AND part_no                = 'ParentPart'
...