【问题标题】:Create Materialized View from table whilst adding missing values sourced from different table从表中创建物化视图,同时添加来自不同表的缺失值
【发布时间】:2016-06-08 06:04:51
【问题描述】:

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

我在 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,但只问了一半的问题,因此应该更好地措辞我的第一篇文章,对不起!

【问题讨论】:

  • 嗨@jellydev,欢迎来到SO ...阅读如何在这里提出好问题并获得好答案-> odedcoster.com/blog/2010/07/28/… 请记住:我们,这个社区的人,正在这样做在我们的空闲/空闲时间,我们的努力没有得到报酬。任何提问的人都应该记住这一点;)

标签: sql oracle materialized-views


【解决方案1】:

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

试试这个。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-21
    • 1970-01-01
    • 2018-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-07
    相关资源
    最近更新 更多