Я работаю с базой данных черного ящика, которую я не создал, и не могу редактировать. Кроме того, этот запрос выбора должен выполняться в отчетах jasper, поэтому я не могу написать хранимую процедуру.
У меня есть система инвентаризации, которая использует таблицу сопоставления родитель / потомок и выдает новые ключи каждый раз, когда происходит изменение состояния инвентаря. Я работаю с 2 таблицами, это важные поля и упрощенный запрос:
allinv, который содержит поля:
invmaster
invkey
и
pclink, который содержит поля (соответствует invkeys для allinv выше):
родитель
ребенок
Следующий запрос работает для одного предмета инвентаря и показывает прогрессию, как и ожидалось, но требует знания корня и предоставления главного ключа.
Тогда мой вопрос: если мне нужно вернуть все элементы инвентаризации (удалить предложение where) с этой структурой, есть ли способ автоматического определения корневого элемента и установки «начала с» или чего-то, что будет работать аналогичным образом? так что я могу использовать это как подзапрос к аналитическому окну запроса, чтобы по пути извлекать корень, листы и статусы?
select
ai.invkey AS sxkey,
stl.parent as parent,
stl.child as child,
level as lvl,
CONNECT_BY_ISLEAF as IsLeaf,
CONNECT_BY_ROOT(STL.parent) as root
from eprog.allinv ai
left join eprog.pclink stl
on ai.invkey = stl.parent
where invmasterkey = 'SA3010401'
start with stl.parent = '#gRR5'
connect by nocycle prior stl.child = stl.parent;