Oracle UNION ALL不返回完整集

ulydmbyx  于 2023-08-03  发布在  Oracle
关注(0)|答案(3)|浏览(98)

我有两个表,用相同的结构填充到两个不同的表中:MST3_CURR和MST4_CURR。帐户被填充到两个表之一;每个表保存处于不同“状态”的帐户。为了生成完整的帐户列表,需要完全连接表,并提取帐户的最新数据。
还有其他几个表遵循完全相同的方法,其中我使用UNION ALLoperator 没有问题。然而,由于某些原因,当我执行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 12 c所表现出的这种特殊行为,我无法找到任何答案。请让我知道,如果有信息丢失,将有助于回答我的问题。

  • 谢谢-谢谢
k7fdbhmy

k7fdbhmy1#

可能是查询的表中的列的顺序不同,因此在联合中反转表导致不同的列被“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中的列顺序是否相同。

nfs0ujit

nfs0ujit2#

下面的语句返回[m3 first,then 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)
;
}

字符串

30byixjq

30byixjq3#

最近也注意到了同样的问题。由于某些原因,WITH子句与UNION ALL子句不匹配。将查询更改为UNION,如下所示,它应该通过。

{
WITH cchm_d_curr AS (
  SELECT 'm3' src, m3.* FROM hcus_raw.cchm_d_mst3_curr m3
    UNION
  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)
;
}

字符串

相关问题