Oracle Connect BY - только возвращение элемента первого уровня
-
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'
.