首页 > 解决方案 > 在物化视图创建中考虑同一张表的子查询

问题描述

下午好,

如何编辑我的选择以避免物化视图内的子查询错误消息。

ORA-22818 此处不允许子查询表达式

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

表和列的逻辑如下:

"persona" 表有列标识其他被吸收或受监护的人,这些列是:

-codeABS是的codigoCarABS

描述:

1-“codigo”字段是“角色”表的主键。

2-“codCard”字段是“persona”表的唯一代码。

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

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

标签: oracleoracle11goracle10goracle-sqldeveloper

解决方案


加盟怎么样?

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获取一个值的子句。是否有一些时间戳列,序数,......这有帮助?如果不是,并且您并不真正关心要返回哪个值,则可以将 egMIN函数应用于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;

推荐阅读