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

时间:2016-06-08 06:04:52

标签: sql oracle materialized-views

我正在尝试创建一个物化视图,该视图由现有表的所有列组成,同时根据不同表中的日期在日期列中添加任何缺失值,该表在单独的值中连接(名字)专栏。因此,两个表都有日期和匹配的firstname列,但在主表中缺少一些日期字段,需要从另一个表中获取。

我在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"同样。

非常感谢任何帮助。

如果问题很重要:问题问题,我确实做了类似first post,但只问了一半的问题,因此应该更好地说明我的第一篇文章,对不起!

1 个答案:

答案 0 :(得分:0)

左外连接应该能够满足您的要求。

试试这个。

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表应该只包含每个名字的一条记录,否则你可能会获得一个名字的多条记录。

另外,为什么要创建物化视图。如果卷不是很大,那么简单的视图应该可以满足您的需求。

有关联接的信息,请查看以下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