Sql 如何使用不同的约束跨联合选择部分共享参数值?

Sql 如何使用不同的约束跨联合选择部分共享参数值?,sql,oracle,view,Sql,Oracle,View,我有一个观点 create or replace view v_collected as select car.id_car ,car.state_car ,[..] from cars car ,garages garage ,[..] where [..] 这至少对car.id是唯一的 现在,我想将3个不同的查询合并到第二个视图中,该视图采用用户设置的参数: select 0 as score ,p

我有一个观点

create or replace view v_collected as
  select car.id_car
        ,car.state_car
        ,[..]
   from cars    car
       ,garages garage
       ,[..]
  where [..]
这至少对car.id是唯一的

现在,我想将3个不同的查询合并到第二个视图中,该视图采用用户设置的参数:

select 0 as score
      ,p0.*
 from v_collected p0
where 1 = 1
  -- User IO Binding
  and p0.car       = 'Audi'
  and p0.garage    = 'P01'
  and p0.state_car = 'Ok'

union

select 1 as score
      ,p1.*
 from v_collected p1
where 1 = 1
  -- Should access the identical binding
  and p1.car       <> p0.car
  and p1.state_car =  p0.state_car
union

select 2 as score
      ,p2.*
 from v_collected p2
where 1 = 1
  -- Should access the identical binding
  and p2.state_car =  p0.state_car

由于第二个查询无法访问第一个查询,因此上述操作不起作用。随着约束条件的变化,我相信我不能使用CTE。我的选择是什么?

由于需求是模糊的,我不能确定以下解决方案是否完整,但是,我会考虑将p0、p1、p2分解为带有子句的子查询,这样您可以在p1和p2中使用p0。例如:

with cars as
(
select 2 id_car, 'Ford' car, 'Ok' state_car from dual union
select 1 id_car, 'Audi' car, 'Ok' state_car from dual
)
, garages as
(
select 2 id_car, 'P02' garage from dual union
select 1 id_car, 'P01' garage from dual
)
, v_collected as
(
select car.id_car
      ,car.car
      ,car.state_car
      ,garage.garage 
from cars    car
    ,garages garage
where 1=1
  and car.id_car = garage.id_car
)
-- select * from v_collected; 
, p0_subquery as
(
select 0 as score
      ,p0.*
 from v_collected p0
where 1 = 1
  -- User IO Binding
  and p0.car       = 'Audi'
  and p0.garage    = 'P01'
  and p0.state_car = 'Ok'
)
--select * from p0_subquery;
, p1_subquery as
(
select 1 as score
      ,p1.*
 from v_collected p1
 , p0_subquery p0
where 1 = 1
  -- Should access the identical binding
  and p1.car       <> p0.car
  and p1.state_car =  p0.state_car
)
, p2_subquery as
(
select 2 as score
      ,p2.*
from v_collected p2
, p0_subquery p0
where 1 = 1
  -- Should access the identical binding
  and p2.state_car =  p0.state_car
)
select * from p0_subquery
union
select * from p1_subquery
union
select * from p2_subquery
;
我相信我不能使用CTE为什么?