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
我有一个查询,其中我 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