2017-02-01 55 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) 
; 

我很茫然寻找任何形式的答案,以这种奇特的行为,甲骨文12C是参展。请让我知道是否有信息缺失,这将有助于回答我的问题。

谢谢。

+1

这些正常的表,或他们也许看到?他们还有什么不寻常的地方吗?查询是否并行运行? –

+1

'UNION ALL'不是加入!如果您对此感到困惑,我们怎么能相信您所说的其他内容其实都是准确的? – mathguy

+0

@亚历克斯:桌子上没什么不寻常的。这些不是意见或物化意见。 –

回答

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

此查询语句的结果会导致结果中存在来自_m4_的** 0 **记录。如果我颠倒了_WITH_子句中的顺序,那么结果集只包含_m4_ –