Oracle UNION ALL未返回完整集

时间:2017-02-01 15:26:15

标签: sql oracle oracle12c union-all

我有两个表用相同的结构填充到2个不同的表中:MST3_CURR和MST4_CURR。帐户被填充到两个表中的一个;每个表都包含处于不同“状态”的帐户。为了生成完整的帐户列表,需要将表格完全连接起来,并为帐户提取最新数据。

还有其他几个表遵循完全相同的方法,我正在使用UNION ALL 运算符而没有问题。但是,由于某些原因,当我执行UNION ALL这两个表时,我收到 4700121500023998 的记录,该记录位于 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所展示的这种特殊行为的任何答案。如果缺少有助于回答我问题的信息,请告诉我。

谢谢。

2 个答案:

答案 0 :(得分: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)
;
}

答案 1 :(得分:0)

可能是查询表中的列顺序不同,因此,联合中的反转表会导致不同的列被“ where”过滤,即

select a, b 
from (select A, b from t1
      union all
      select b, A from t2)
where a=1

返回与该查询预期不同的内容

select a, b 
from (select A, b from t1
      union all
      select A, b from t2)
where a=1

我将检查原始问题中表hcus_raw.cchm_d_mst3_curr和hcus_raw.cchm_d_mst4_curr中的列顺序是否相同。