Select 其中:分类及其子项

Select where: classification and its children

我有一个查询,其中我 select 分类 = 60280 或分类是 60280 的子分类的工单:

select
    wo.*
from
    workorder wo
where
    exists (select 1 from classancestor where ((ancestor = '60280')) and (classstructureid=wo.classstructureid))

(就其价值而言,这类似于 Advanced Search window 在 Maximo 列表视图中的功能。)

虽然上面的查询工作正常,但由于子查询,我怀疑它在大型 table 上无法很好地扩展。

有没有办法 select 分类及其子查询而不使用子查询?

select
    wo.*
from
    workorder wo join classancestor ca on (ca.classstructureid=wo.classstructureid)
where
    ca.ancestor = '60280'

但这不一定更好,因为 Oracle 会根据需要进行优化。尝试 运行 几次,看看会发生什么。

我改编了@Mankowitz 的回答:

select
    wo.*
from
    workorder wo 
left join 
    classancestor ca 
    on ca.classstructureid = wo.classstructureid
where
    ca.ancestor = '60280'
 
    and woclass in ('WORKORDER', 'ACTIVITY') 
    and historyflag = 0 
    and istask = 0