【发布时间】:2010-01-26 18:50:15
【问题描述】:
我在过去可以工作的 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
(最终还有这个 obs 术语被使用的次数,但我稍后会担心)。
【问题讨论】:
-
请提供一些观点。如果我们只能了解您希望查询做什么,我们都愿意提供帮助。
-
能否发布 obshead 表的描述和一些示例数据以及 hiergrps 表的描述和更多示例数据?
-
@SarekOfVulcan:我不是在这里挑剔彼得朗,但你为什么接受他的回答?它不仅会以相反的顺序生成
Group列,而且在针对我的解决方案中的示例数据运行时还会生成额外的行。 -
@Vadim:你是对的。我已经切换了标记的答案。我以为您的查询遗漏了一些行,但第二次运行它时,我找到了我正在寻找的那些——不确定它们藏在哪里。不过,我认为它不会给我的数据多出一行。
标签: sql oracle plsql hierarchical-data