2016-06-08 34 views
0

我試圖創建一個物化視圖,它由現有表的所有列組成,同時在日期列中添加任何缺失值在單獨(名字)列中的值中加入的不同表中的日期。所以這兩個表都有日期和匹配的名字列,但在主表中有一些日期字段丟失,需要從另一個表中獲取。從表中創建物化視圖,同時添加來自不同表格的缺失值

我在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

嗨@jellydev,歡迎SO ......就如何提出好的問題,在這裏有很好的答案讀 - > http://odedcoster.com/blog/2010/07/記住:我們這個社區的人在我們的閒暇/閒暇時間裏這樣做,我們沒有爲我們的努力付出代價。任何人提問都應該記住;) –

回答

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