Oracle Connect BY - только возвращение элемента первого уровня

StackOverflow https://stackoverflow.com//questions/9701237

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

.. Однако я только получаю первый ряд (родитель).

Примечание. Таблица имеет композитный ключ CAPT_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