2017-02-01 10 views
1

У меня есть две таблицы, которые заполнены той же структурой в 2 разных таблицах: MST3_CURR и MST4_CURR. Учетные записи заполняются в одну из двух таблиц; каждая таблица содержит учетные записи, которые находятся в другом «состоянии». Чтобы создать полный список учетных записей, таблицы должны быть полностью объединены и иметь самые последние данные для выведенной учетной записи.Oracle UNION ALL не возвращает полный набор

Существует несколько других таблиц, которые следуют точно так же, когда я использую оператор UNION ALL без проблем. Однако, по какой-то причине с этими двумя таблицами, когда я выполнить UNION ALL я получаю запись за счет который находится в MST3_CURR, но и другие счета в MST4_CURR и нет в конечном наборе данных. Когда я отменил заказ UNION ALL и получил MST4_CURR, а затем MST3_CURR обратное верно.

WITH cchm_d_curr AS (
    SELECT * FROM hcus_raw.cchm_d_mst3_curr 
    UNION ALL 
    SELECT * FROM hcus_raw.cchm_d_mst4_curr 
) 
SELECT chd_current_balance FROM cchm_d_curr 
WHERE 
    chd_account_number IN (4700121500023998, 4700121500090430, 4700121500044101, 4700121500250492, 4700121500250013) 
; 

Я не в силах найти какой-либо ответ на это своеобразное поведение, которое проявляет Oracle 12c. Пожалуйста, дайте мне знать, если нет информации, которая поможет ответить на мой вопрос.

спасибо.

+1

Эти обычные таблицы, или они, возможно, видны? Что-нибудь еще необычное в них? Выполняется ли запрос параллельно? –

+1

"UNION ALL" не присоединился! Если вы смущены этим, как мы можем доверять тому, что все остальное, что вы говорите, на самом деле точны? – mathguy

+0

@Alex: В таблицах нет ничего необычного. Это не виды или материализованные представления. –

ответ

0

Что делает следующий возврат [m3 сначала, затем m4 первый] ??

{ 
WITH cchm_d_curr AS (
    SELECT 'm3' src, m3.* FROM hcus_raw.cchm_d_mst3_curr m3 
    UNION ALL 
    SELECT 'm4' src, m4.* FROM hcus_raw.cchm_d_mst4_curr m4 
) 
SELECT src, chd_account_number, chd_current_balance FROM cchm_d_curr 
WHERE 
    chd_account_number IN (4700121500023998, 4700121500090430, 4700121500044101, 4700121500250492, 4700121500250013) 
; 
} 
+0

Результат этого запроса запроса приводит к ** 0 ** записей из _m4_, присутствующих в результате. Если я отменяю порядок в рамках предложения _WITH_, то набор результатов содержит только записи из _m4_ –