在实体化视图创建中考虑相同 table 的子查询

consider subquery of the same table in materialized view creation

下午好,

如何编辑我的 select 以避免实体化视图中的子查询错误消息。

ORA-22818 subquery expressions not allowed here

create materialized view vista1
refresh complete on demand
as

select f1.codigo,f1.Car,f1.codCard,f1.descripcion,f1.caracteristicas,
  f1.razonsocial
  f1.codigoAbs,
  f1.codigoCarAbs,
  (select ff.Car 
   from persona ff 
   where ff.codigo=f1.codigoabs 
     and ff.codCard=f1.codigoCarAbs 
     and rownum=1) as "absorbed reference"
from persona f1

table和列的逻辑如下:

“角色”table 有一些列可以识别其他被吸收或受到监护的人,这些列是:

-codeABS y codigoCarABS

描述:

1-“codigo”字段是“persona”的主键table。

2-“codCard”字段是“角色”的唯一代码table。

3-“codeABS”字段,表示被吸收的“角色”的代码,属于同一个“角色”的代码table。

4-“codigoCarABS”字段,表示被吸收的“persona”的CAR代码,属于同一个“persona”的代码table.

加入怎么样?

SELECT f1.codigo,
       f1.car,
       f1.codcard,
       f1.descripcion,
       f1.caracteristicas,
       f1.razonsocial,
       f1.codigoabs,
       f1.codigocarabs,
       f2.car AS absorbed_reference
FROM persona f1
JOIN persona f2 ON f1.codigo = f2.codigoabs AND f1.codigocarabs = f2.codcard;
您使用的

ROWNUM = 1 意味着可能有 2 行或更多行;我相信“我的”查询会错过 where 子句,该子句将确保只从 f2 中获取一个值。是否有一些时间戳列、序号……对此有帮助?如果不是,并且您真的不关心 return 的哪个值,您可以应用例如MIN 函数到 f2.car 并将其余选定列放入 group by 子句:

SELECT f1.codigo,
       f1.car,
       f1.codcard,
       f1.descripcion,
       f1.caracteristicas,
       f1.razonsocial,
       f1.codigoabs,
       f1.codigocarabs,
       MIN(f2.car)AS absorbed_reference
FROM persona f1
JOIN persona f2 ON f1.codigo = f2.codigoabs
                   AND f1.codigocarabs = f2.codcard
GROUP BY f1.codigo,
         f1.car,
         f1.codcard,
         f1.descripcion,
         f1.caracteristicas,
         f1.razonsocial,
         f1.codigoabs,
         f1.codigocarabs;