2016-06-08 6 views
0

Я пытаюсь создать материализованное представление, которое должно состоять из всех столбцов существующей таблицы, в то же время добавляя любые отсутствующие значения в столбце даты на основе даты в другой таблице, которая соединена значением в отдельном столбце (первое имя). Таким образом, обе таблицы имеют дату и соответствующие столбцы 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» должен быть просто «а».

Любая помощь очень ценится.

В случае, если это имеет значение: вопрос спрашивает, я сделал аналогичный first post, но задал только половину вопроса и, следовательно, должен был сформулировать свое первое сообщение лучше, извините!

+1

Привет @jellydev, добро пожаловать на SO ... есть читать о том, как задавать хорошие вопросы и хорошие ответы здесь -> http://odedcoster.com/blog/2010/07/ 28/get-good-answers-on-stackoverflow-part-1-of-n/ Помните: мы, люди этого сообщества, делаем это в свободное время и в свободное время, нам не платят за наши усилия. Любой, кто задает вопросы, должен помнить, что;) –

ответ

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; 

Однако таблица б должен содержать только одну запись для каждого FirstName, иначе вы можете получить несколько записей для одного имени.

Кроме того, почему вы создаете материализованный вид. Простой вид должен служить вашей цели, если объемы не огромны.

Просьба ознакомиться с следующей документацией 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