我正在尝试创建一个物化视图,该视图由现有表的所有列组成,同时根据不同表中的日期在日期列中添加任何缺失值,该表在单独的值中连接(名字)专栏。因此,两个表都有日期和匹配的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,但只问了一半的问题,因此应该更好地说明我的第一篇文章,对不起!
答案 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