【发布时间】:2020-11-07 20:26:18
【问题描述】:
我有一个查询,我选择分类 = 60280 或分类是 60280 的子级的工单:
select
wo.*
from
workorder wo
where
exists (select 1 from classancestor where ((ancestor = '60280')) and (classstructureid=wo.classstructureid))
(就其价值而言,这类似于 Advanced Search window 在 Maximo 列表视图中的功能。)
虽然上面的查询运行良好,但我怀疑由于子查询的原因,它无法在大表上很好地扩展。
有没有办法在不使用子查询的情况下选择一个分类及其子类?
【问题讨论】:
-
您可以将其重写为 JOIN,但不能保证它会更有效。 Oracle 将根据您想要的信息创建执行计划。
-
我不明白。在这个词的解释中,你说的是“分类= xyz”。在您的 WHERE 条件下,我没有看到类似的情况。我错过了什么?
-
好的 - 我看到了你所做的编辑。我还是不明白。我看到您正在寻找祖先 = '60280'。我仍然看不到您在哪里寻找“分类”本身为“60280”的行。 (我也没有看到你的表定义,所以我不知道“分类”是什么 - 我想这是因为这个问题非常具体地是关于 maximo,我没有听说过.) 在任何情况下-似乎分层(CONNECT BY)查询可能是您最好的选择。但是,你已经有了一个“正确答案”,所以我猜你已经不在乎了。
标签: sql oracle query-performance maximo oracle18c