从 table 创建物化视图,同时添加来自不同 table 的缺失值

Create Materialized View from table whilst adding missing values sourced from different table

我正在尝试创建一个由现有 table 的所有列组成的物化视图,同时根据不同 [=33] 中的日期在日期列中添加任何缺失值=] 在单独的(名字)列中按值连接。所以两个 table 都有日期和匹配的名字列,但在主要的 table 中,一些日期字段丢失了,需要从另一个 table.

中获取

我在 SELECT 声明中这样做,但我不确定这是否是最好的方法。任何想法表示赞赏。

到目前为止我有这个:

CREATE materialized view mviewname as 
(SELECT a.col1, a.col2, a.firstname, NVL(a.dateofbirth, 
(SELECT b.dateofbirth from FillTable b JOIN MainTable 
c on b.firstname=c.firstname)) from MainTable a);

显然这是不正确的,我收到 single-row subquery returns more than one row 错误的原因很明显。

我也不确定 MAINTABLE 是否应该使用别名两次,或者 "c" 是否也应该只是 "a"。

非常感谢任何帮助。

以防万一回复:提问,我确实做了类似的 但只问了一半问题,因此我的第一个 post 应该措辞更好,抱歉!

左外连接应该可以满足你的要求。

试试这个。

SELECT a.col1,
       a.col2, 
       a.firstname, 
       NVL(a.dateofbirth, b.dateofbirth) 
FROM   maintable a
LEFT OUTER JOIN filltable b ON a.firstname = b.firstname;

但是,b table 应该只包含每个名字的一条记录,否则您可能会得到一个名字的多条记录。

另外,为什么要创建实体化视图。如果卷不是很大,一个简单的视图应该可以满足您的目的。

请阅读以下 Oracle 文档以获取有关联接的信息。

https://docs.oracle.com/cd/B28359_01/server.111/b28286/queries006.htm

如果您坚持要创建实体化视图,那么您可能需要考虑为其定义一个刷新策略。

这里有一些有用的链接。

https://docs.oracle.com/database/121/DWHSG/refresh.htm https://docs.oracle.com/cd/B28359_01/server.111/b28326/repmview.htm