在实体化视图创建中考虑相同 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
- 我无法编辑 table 的结构或创建其他结构。
描述:
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;
下午好,
如何编辑我的 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
- 我无法编辑 table 的结构或创建其他结构。
描述:
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;