У меня есть иерархический запрос в Oracle 10 SQL, который раньше работал. Тем не менее, я удалил материализованное представление, на котором оно было основано, и теперь я не могу заставить его выглядеть правильно, даже оставляя это представление вообще.
Исходный запрос выглядел так:
select oh.name, oh.description
, sys_connect_by_path(groupname, ':') "Groups"
, (select count(*)
from ml.lastobsmv
where lastobsmv.hdid = oh.hdid) as obscount
from ml.obshead oh
join ml.hiergrps hg on oh.groupid = hg.groupid
connect by prior hg.groupid = hg.parentid
Полагаю, это все еще работает, но без представления lastobsmv я не могу проверить это.
Если я урежу его до
select oh.name, oh.description
from ml.obshead oh
join ml.hiergrps hg on oh.groupid = hg.groupid
это все еще работает, возвращая 41K записей. Однако, когда я использую предложение connect by, оно выходит из-под контроля, возвращая миллионы записей (обычно я должен отменить его, прежде чем получить точный счет).
select oh.name, oh.description
, sys_connect_by_path(groupname, ':') "Groups"
from ml.obshead oh
join ml.hiergrps hg on oh.groupid = hg.groupid
connect by prior hg.groupid = hg.parentid
Мне не хватает чего-то действительно вопиющего здесь, или я неправильно понимаю, как это должно работать? Спасибо.
Вадим,
Должен возвращаться список Условий наблюдения вместе с группой, в которой они находятся. Например,
Obshead:
# CYCLE DAYS, number of days in menstrual cycle, 100
HierGrps:
100, 50, Gynecology
50, 10, Tx
10, 0, Basic
должен произвести
# CYCLE DAYS, number of days in menstrual cycle, :Basic:Tx:Gynecology
(в конце концов, вместе с тем, сколько раз этот термин использовался, но об этом я буду беспокоиться позже).