2017-02-01 14 views
1

同じ構造を持つ2つのテーブルが2つの異なるテーブル:MST3_CURRとMST4_CURRにあります。アカウントは2つのテーブルのいずれかに移入されます。各テーブルには異なる「状態」のアカウントがあります。アカウントの完全なリストを生成するには、テーブルを完全に結合し、アカウントの最新のデータを取得する必要があります。Oracle UNION ALLは完全なセットを返しません

UNION ALLオペレータを使用しているのとまったく同じアプローチに従ったいくつかのテーブルがあります。しかし、私はUNION ALLを実行するときに、これらの2つのテーブルが何らかの理由で、私は、アカウントのレコードを受け取る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 first、m4 first]は何ですか?

{ 
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

このクエリ文の結果は、結果に_m4_の** 0 **レコードが存在することになります。 _WITH_句内で順序を逆にすると、結果セットには_m4_ –

関連する問題